home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / misc / pipeline.lha / Pipeline / Pipeline_II.asm < prev    next >
Assembly Source File  |  1992-05-15  |  57KB  |  2,830 lines

  1.         opt    c-,d-,o1+,o2+,ow-,l+
  2.  
  3. *
  4. *   PIPELINE II
  5. *
  6. *   Written by André Wichmann of CLUSTER in Mar-Apr 1990
  7. *
  8. *   Concept: EMPIRE       (Pipe Mania/Pipe Dream)
  9. *            MASTERTRONIC (Locomotion or something like that)
  10. *
  11. *   This program is FREEWARE ! For further information read the doc-file !
  12. *
  13. *   Improvements made from 14/08/90 to 22/08/90
  14. *   Last update made on 10/12/90
  15. *
  16.  
  17.         incdir    "RAM:include/"
  18.         include    "exec/exec_lib.i"
  19.         include    "Libraries/dos_lib.i"
  20.  
  21. *** Equates
  22.  
  23.         XREF    _Intro        Link it with 'Intro.o'
  24.  
  25. DMACONR        equ    $DFF002
  26. JOY0DAT        equ    $DFF00A
  27. JOY1DAT        equ    $DFF00C
  28. BLTCON0        equ    $DFF040
  29. BLTCON1        equ    $DFF042
  30. BLTAFWM        equ    $DFF044
  31. BLTALWM        equ    $DFF046
  32. BLTCPTH        equ    $DFF048
  33. BLTBPTH        equ    $DFF04C
  34. BLTAPTH        equ    $DFF050
  35. BLTDPTH        equ    $DFF054
  36. BLTSIZE        equ    $DFF058
  37. BLTCMOD        equ    $DFF060
  38. BLTBMOD        equ    $DFF062
  39. BLTAMOD        equ    $DFF064
  40. BLTDMOD        equ    $DFF066
  41. DIWSTRT        equ    $DFF08E
  42. DIWSTOP        equ    $DFF090
  43. DDFSTRT        equ    $DFF092
  44. DDFSTOP        equ    $DFF094
  45. BPL1PTH        equ    $DFF0E0
  46. BPL1PTL        equ    $DFF0E2
  47. BPL2PTH        equ    $DFF0E4
  48. BPL2PTL        equ    $DFF0E6
  49. BPL3PTH        equ    $DFF0E8
  50. BPL3PTL        equ    $DFF0EA
  51. BPL4PTH        equ    $DFF0EC
  52. BPL4PTL        equ    $DFF0EE
  53. BPL5PTH        equ    $DFF0F0
  54. BPL5PTL        equ    $DFF0F2
  55. BPL6PTH        equ    $DFF0F4
  56. BPL6PTL        equ    $DFF0F6
  57. BPL1MOD        equ    $DFF108
  58. BPL2MOD        equ    $DFF10A
  59. BPLCON0        equ    $DFF100
  60. BPLCON1        equ    $DFF102
  61. BPLCON2        equ    $DFF104
  62. DMACONW        equ    $DFF096
  63. DMACON        equ    $DFF096
  64. COLOR00        equ    $DFF180
  65. VHPOSR        equ    $DFF006
  66. CIAAPRA        equ    $BFE001
  67. STARTLIST    equ    38
  68. COP1LC        equ    $DFF080
  69. COPJMP1        equ    $DFF088
  70. SPR0DAT        equ    $DFF144
  71. CHIP        equ    $10002
  72. Planesize    equ    256*40
  73. Planes        equ    5
  74. CLsize        equ    1000*4
  75.  
  76. *** Macros
  77.  
  78.  
  79. ALLOC        MACRO
  80.         move.l    #\1,d0
  81.         move.l    #\2,d1
  82.         CALLEXEC AllocMem
  83.         ENDM
  84. FREE        MACRO
  85.         move.l    \1,a1
  86.         move.l    #\2,d0
  87.         CALLEXEC FreeMem
  88.         ENDM
  89.  
  90. MPRINT        MACRO
  91.         move.l    #1,Text_Flag
  92.         move.l    #3,Text_Delay
  93.         move.l    Plane0,a1
  94.         add.l    #\1*Planesize,a1
  95.         add.l    #\2+\3*40,a1
  96.         lea    \4,a0
  97.         bsr    Print_Text
  98.         ENDM
  99.  
  100. PRINT        MACRO
  101.         move.l    Plane0,a1
  102.         add.l    #\1*Planesize,a1
  103.         add.l    #\2+\3*40,a1
  104.         lea    \4,a0
  105.         bsr    Print_Text
  106.         ENDM
  107.  
  108.         SECTION    "Pipeline",CODE_C
  109.  
  110. ***** Main *****
  111.  
  112.         include "Libraries/Dosextens.i"
  113.     
  114.         movem.l    d0/a0,-(sp)
  115.         clr.l    _WBenchMsg
  116.         sub.l    a1,a1
  117.         CALLEXEC FindTask
  118.         move.l    d0,a4
  119.         tst.l    pr_CLI(a4)
  120.         beq    _WB
  121.         movem.l    (sp)+,d0/a0
  122.         bra    _run
  123. _WB        lea    pr_MsgPort(a4),a0
  124.         CALLEXEC WaitPort
  125.         lea    pr_MsgPort(a4),a0
  126.         CALLEXEC GetMsg
  127.         move.l    d0,_WBenchMsg
  128.         movem.l    (sp)+,d0/a0
  129. _run        jsr    _Intro
  130.         bsr    _main
  131.         move.l    d0,-(sp)
  132.         tst.l    _WBenchMsg
  133.         beq    _Exit
  134.         CALLEXEC Forbid
  135.         move.l    _WBenchMsg(pc),a1
  136.         CALLEXEC ReplyMsg
  137. _Exit        move.l    (sp)+,d0
  138.         rts
  139.  
  140. _WBenchMsg    ds.l    1
  141.  
  142. _Main        bsr    OpenLibs
  143.         sub.l    a1,a1
  144.         CALLEXEC FindTask
  145.         move.l    d0,a0
  146.         move.l    pr_WindowPtr(a0),OldWindow
  147.         move.l    #-1,pr_WindowPtr(a0)
  148.         ALLOC    Planesize*4,CHIP
  149.         move.l    d0,PlayPic
  150.         ALLOC    18*4*2*16,CHIP
  151.         move.l    d0,PlayObj
  152.         ALLOC    48*2*16,CHIP
  153.         move.l    d0,PlayFloat
  154.         ALLOC    512,CHIP
  155.         move.l    d0,PlayFont
  156.         ALLOC    3*130*40,CHIP
  157.         move.l    d0,PipeCluster
  158.         ALLOC    4*232*40,CHIP
  159.         move.l    d0,PipeLogo
  160.         move.l    #Filen_0,d1
  161.         move.l    #1005,d2
  162.         CALLDOS Open
  163.         move.l    d0,d7
  164.         move.l    d7,d1
  165.         move.l    PlayPic,d2
  166.         move.l    #Planesize*4,d3
  167.         CALLDOS Read
  168.         move.l    d7,d1
  169.         CALLDOS Close
  170.         move.l    #Filen_1,d1
  171.         move.l    #1005,d2
  172.         CALLDOS Open
  173.         move.l    d0,d7
  174.         move.l    d7,d1
  175.         move.l    PlayObj,d2
  176.         move.l    #18*4*2*16,d3
  177.         CALLDOS Read
  178.         move.l    d7,d1
  179.         CALLDOS Close
  180.         move.l    #Filen_2,d1
  181.         move.l    #1005,d2
  182.         CALLDOS Open
  183.         move.l    d0,d7
  184.         move.l    d7,d1
  185.         move.l    PlayFloat,d2
  186.         move.l    #48*2*16,d3
  187.         CALLDOS Read
  188.         move.l    d7,d1
  189.         CALLDOS Close
  190.         move.l    #Filen_3,d1
  191.         move.l    #1005,d2
  192.         CALLDOS Open
  193.         move.l    d0,d7
  194.         move.l    d7,d1
  195.         move.l    PlayFont,d2
  196.         move.l    #512,d3
  197.         CALLDOS Read
  198.         move.l    d7,d1
  199.         CALLDOS Close
  200.         move.l    #Filen_4,d1
  201.         move.l    #1005,d2
  202.         CALLDOS Open
  203.         move.l    d0,d7
  204.         move.l    d7,d1
  205.         move.l    PipeCluster,d2
  206.         move.l    #3*130*40,d3
  207.         CALLDOS Read
  208.         move.l    d7,d1
  209.         CALLDOS Close
  210.         move.l    #Filen_5,d1
  211.         move.l    #1005,d2
  212.         CALLDOS Open
  213.         move.l    d0,d7
  214.         move.l    d7,d1
  215.         move.l    PipeLogo,d2
  216.         move.l    #4*232*40,d3
  217.         CALLDOS Read
  218.         move.l    d7,d1
  219.         CALLDOS Close
  220.         move.l    #Filen_6,d1
  221.         move.l    #1005,d2
  222.         CALLDOS Open
  223.         tst.l    d0
  224.         beq    No_Highscores
  225.         move.l    d0,d7
  226.         move.l    d7,d1
  227.         move.l    #HOF,d2
  228.         move.l    #240,d3
  229.         CALLDOS Read
  230.         move.l    d7,d1
  231.         CALLDOS Close
  232. No_Highscores    move.l    #200,d1
  233.         CALLDOS Delay
  234.         bset.b    #1,$bfe001
  235.         jsr    Start_Muzak
  236.         move.l    #2,Difficulty
  237.  
  238. Title        ALLOC    Planesize*Planes,CHIP
  239.         move.l     d0,Plane0
  240.         ALLOC    CLSize,CHIP
  241.         move.l    d0,CLadr
  242.         move.l    d0,a0
  243.         move.l    Plane0,d1
  244.         move.w    #BPL1PTH-$DFF000,d3
  245.         move.w    #Planes-1,d4
  246. Make_CL        move.w     d3,(a0)+
  247.         addq.w    #2,d3
  248.         swap    d1
  249.         move.w    d1,(a0)+
  250.         move.w    d3,(a0)+
  251.         addq.w    #2,d3
  252.         swap     d1
  253.         move.w    d1,(a0)+
  254.         add.l    #Planesize,d1
  255.         dbra    d4,Make_CL
  256.         move.w    #$180,(a0)+
  257.         move.w    #0,(a0)+
  258.         move.l    a0,Target
  259.         move.l    #$fffffffe,(a0)
  260.         
  261.         CALLEXEC Forbid
  262.         move.w    #%0000000111100000,DMACONW
  263.         clr.l    SPR0DAT
  264.         move.l    CLAdr,COP1LC
  265.         clr.w    COPJMP1
  266.         move.w    #$3081,DIWSTRT
  267.         move.w     #$30c1,DIWSTOP
  268.         move.w  #$0038,DDFSTRT
  269.         move.w  #$00d0,DDFSTOP
  270.         move.w  #%0101000000000000,BPLCON0
  271.         clr.w    BPLCON1
  272.         clr.w    BPLCON2
  273.         clr.w    BPL1MOD
  274.         clr.w    BPL2MOD
  275.         move.w    #%1000011111011111,DMACONW
  276.  
  277. Title_Loop    bsr    Clear_Colors
  278.         move.l    Target,a0
  279.         move.l    #$fffffffe,(a0)
  280.         move.l    PipeLogo,a0
  281.         move.l    Plane0,a1
  282.         move.l    #3,d7
  283. Show_Logo_1    move.l    a1,a2
  284.         move.l    #232*40-1,d6
  285. Show_Logo_2    move.b    (a0)+,(a2)+
  286.         dbra    d6,Show_Logo_2
  287.         add.l    #Planesize,a1
  288.         dbra    d7,Show_Logo_1
  289.  
  290.         PRINT    4,0,10,HOFText
  291.         lea    HOFBuffer,a0
  292.         move.l    #39,d0
  293. Clear_HOFB    move.b    #" ",(a0)+
  294.         dbra    d0,Clear_HOFB
  295.  
  296.         lea    HOF,a5
  297.         move.l    #42*40,d6
  298.         move.l    #9,d7
  299. Show_High    move.l    (a5)+,d2
  300.         movem.l    d6/d7/a5,-(sp)
  301.         bsr    BinDec
  302.         movem.l    (sp)+,d6/d7/a5
  303.         lea    HOFBuffer+4,a1
  304.         lea    Dec_Buffer+1,a0
  305.         move.l    #6,d0
  306. Copy_Score    move.b    (a0)+,(a1)+
  307.         dbra    d0,Copy_Score
  308.         move.b    #" ",(a1)+
  309.         move.b    #" ",(a1)+
  310.         move.b    #" ",(a1)+
  311.         move.l    #19,d0
  312. Copy_Name    move.b    (a5)+,(a1)+
  313.         dbra    d0,Copy_Name
  314.         move.b    #0,(a1)+
  315.         movem.l    d6/d7/a5,-(sp)
  316.         move.l    Plane0,a1
  317.         add.l    #4*Planesize,a1
  318.         add.l    d6,a1
  319.         lea    HOFBuffer,a0
  320.         bsr    Print_Text
  321.         movem.l    (sp)+,d6/d7/a5
  322.         add.l    #16*40,d6
  323.         dbra    d7,Show_High
  324.  
  325.         lea    TitleCols_1,a5
  326.         bsr    Fade_In
  327.  
  328.         move.l    #8,d6
  329. TWait1_2    move.l    #$ffff,d7
  330. TWait_1        btst    #7,$BFE001
  331.         beq    StartGame1
  332.         btst    #6,$BFE001
  333.         beq    EndGame1
  334.         dbra    d7,TWait_1
  335.         dbra    d6,TWait1_2
  336.  
  337.         lea    TitleCols_1,a5
  338.         bsr    Fade_Out
  339.  
  340.         bsr    Clear_Colors
  341.         move.l    Plane0,a1
  342.         move.l    #5*Planesize-1,d0
  343. ClearTPlanes    move.b    #0,(a1)+
  344.         dbra    d0,ClearTPlanes
  345.  
  346.         move.l    Target,a0
  347.         move.w    #$400f,d1
  348.         move.w    #$0000,d2
  349.         move.l    #15,d0
  350. Spreadloop_1    move.w    d1,(a0)+
  351.         move.w    #$fffe,(a0)+
  352.         move.w    #$1a0,(a0)+
  353.         move.w    d2,(a0)+
  354.         add.w    #$0110,d2
  355.         add.w    #$0200,d1
  356.         dbra    d0,Spreadloop_1
  357.         move.w    #$d00f,d1
  358.         move.w    #$0ff0,d2
  359.         move.l    #15,d0
  360. Spreadloop_2    move.w    d1,(a0)+
  361.         move.w    #$fffe,(a0)+
  362.         move.w    #$1a0,(a0)+
  363.         move.w    d2,(a0)+
  364.         sub.w    #$0110,d2
  365.         add.w    #$0200,d1
  366.         dbra    d0,Spreadloop_2
  367.  
  368.         move.l    #$fffffffe,(a0)
  369.  
  370.         move.l    PipeCluster,a0
  371.         move.l    Plane0,a1
  372.         add.l    #40*40,a1
  373.         move.l    #2,d7
  374. Show_Logo_3    move.l    a1,a2
  375.         move.l    #130*40-1,d6
  376. Show_Logo_4    move.b    (a0)+,(a2)+
  377.         dbra    d6,Show_Logo_4
  378.         add.l    #Planesize,a1
  379.         dbra    d7,Show_Logo_3
  380.         lea    TitleCols_2,a5
  381.         bsr    Fade_In
  382.  
  383.         move.l    #Scroll,Scrollptr
  384.         move.l    #1,Scrflag
  385.         bsr    Wait_Blt
  386.         move.w    #$ffff,BLTAFWM
  387.         move.w    #$ffff,BLTALWM
  388.         clr.w    BLTCON1
  389.         move.w    #%0000100111110000,BLTCON0
  390.  
  391. TwoLoop_1    move.l    #2,d1
  392.         move.b    #$ff,d2
  393. TwoLoop_2    move.w    VHPOSR,d0
  394.         lsr.w    #8,d0
  395.         cmp.b    d2,d0
  396.         bne    TwoLoop_2
  397.         subq.l    #1,d2
  398.         dbra    d1,TwoLoop_2
  399.  
  400.         move.l    Plane0,a0
  401.         add.l    #4*Planesize,a0
  402.         add.l    #20*40,a0
  403.         move.l    a0,BLTDPTH
  404.         add.l    #1*40,a0
  405.         move.l    a0,BLTAPTH
  406.         clr.w    BLTAMOD
  407.         clr.w    BLTDMOD
  408.         move.w    #180*64+20,BLTSIZE
  409.         bsr    Wait_Blt
  410.         btst    #7,$BFE001
  411.         beq    StartGame2
  412.         btst    #6,$BFE001
  413.         beq    EndGame2
  414.         subq.l    #1,Scrflag
  415.         tst.l    Scrflag
  416.         bne    TwoLoop_1
  417.         move.l    #8,Scrflag
  418.         move.l    Scrollptr,a0
  419.         lea    HOFBuffer,a1
  420.         move.l    #39,d0
  421. CopyLine    move.b    (a0)+,(a1)+
  422.         dbra    d0,CopyLine
  423.         move.b    #0,(a1)
  424.         move.l    Plane0,a1
  425.         add.l    #4*Planesize,a1
  426.         add.l    #190*40,a1
  427.         lea    HOFBuffer,a0
  428.         bsr    Print_text
  429.         add.l    #40,Scrollptr
  430.         move.l    Scrollptr,a0
  431.         cmp.b    #0,(a0)
  432.         bne    TwoLoop_1
  433.  
  434.         lea    TitleCols_2,a5
  435.         bsr    Fade_Out
  436.         bra    Title_Loop
  437.  
  438. Wait_Blt    btst    #14,DMACONR
  439.         bne    Wait_Blt
  440.         rts
  441.  
  442. StartGame1    lea    TitleCols_1,a5
  443.         bsr    Fade_Out
  444.         bra    StartGame
  445.  
  446. EndGame1    lea    TitleCols_1,a5
  447.         bsr    Fade_Out
  448.         bra    EndGame
  449.  
  450. StartGame2    move.l    Target,a0
  451.         move.l    #$fffffffe,(a0)
  452.         lea    TitleCols_2,a5
  453.         bsr    Fade_Out
  454.         bra    StartGame
  455.  
  456. EndGame2    move.l    Target,a0
  457.         move.l    #$fffffffe,(a0)
  458.         lea    TitleCols_2,a5
  459.         bsr    Fade_Out
  460.         bra    EndGame
  461.  
  462. StartGame    move.w    #$7fff,DMACONW
  463.         move.w    #%1000011011110000,DMACONW
  464.         CALLEXEC Permit
  465.         FREE    CLAdr,CLSize
  466.         FREE    Plane0,Planesize*Planes
  467.  
  468.         clr.l    Play_Level
  469.         clr.l    Score
  470. Play_Loop    addq.l    #1,Play_Level
  471.         bsr    Play
  472.         cmp.l    #1,Status
  473.         beq    Over
  474.         bsr    Good
  475.         bra    Play_Loop
  476.  
  477. Clear_Colors    lea    $DFF180,a0
  478.         move.l    #31,d0
  479. SetColos_1    move.w    #0,(a0)+
  480.         dbra    d0,SetColos_1
  481.         rts
  482.  
  483. EndGame        jsr    stop_muzak
  484.         bclr.b    #1,$bfe001
  485.         move.l    _GfxBase,a4
  486.         move.l    STARTLIST(a4),COP1LC
  487.         clr.w    COPJMP1
  488.         move.w    #%1000011111111111,DMACONW
  489.         CALLEXEC Permit
  490.         FREE    CLAdr,CLSize
  491.         FREE    Plane0,Planesize*Planes
  492.         FREE    PlayPic,Planesize*4
  493.         FREE    PlayObj,18*4*2*16
  494.         FREE    PlayFloat,48*2*16
  495.         FREE    PlayFont,512
  496.         FREE    PipeCluster,3*130*40
  497.         FREE    PipeLogo,4*232*40
  498.         sub.l    a1,a1
  499.         CALLEXEC FindTask
  500.         move.l    d0,a0
  501.         move.l    OldWindow,pr_WindowPtr(a0)
  502.         clr.l    d0
  503.         rts
  504.  
  505. *** Fade in with Colortable in ^a5 ***
  506.  
  507. Fade_In        lea    Hilftab,a0
  508.         move.l    #31,d0
  509. Clear_Tab    clr.w    (a0)+
  510.         dbra    d0,Clear_Tab
  511.         move.l    #15,d7
  512. Fade_Loop_1    lea    Hilftab,a4
  513.         move.l    a5,a3
  514.         lea    Color00,a0
  515.         move.l    #31,d0
  516. Fade_Loop_2    move.w    (a4),(a0)+
  517.         move.w    (a4),d1
  518.         and.l    #15,d1
  519.         move.w    (a3),d2
  520.         and.l    #15,d2
  521.         cmp.l    d1,d2
  522.         beq    No_Increase_1
  523.         addq.w    #1,(a4)
  524. No_Increase_1    move.w    (a4),d1
  525.         and.l    #%11110000,d1
  526.         move.w    (a3),d2
  527.         and.l    #%11110000,d2
  528.         cmp.l    d1,d2
  529.         beq    No_Increase_2
  530.         add.w    #16,(a4)
  531. No_Increase_2    move.w    (a4),d1
  532.         and.l    #%111100000000,d1
  533.         move.w    (a3),d2
  534.         and.l    #%111100000000,d2
  535.         cmp.l    d1,d2
  536.         beq    No_Increase_3
  537.         add.w    #256,(a4)
  538. No_Increase_3    addq.l    #2,a4
  539.         addq.l    #2,a3
  540.         dbra    d0,Fade_Loop_2
  541.         move.l    #$3fff,d0
  542. Fade_Delay    dbra    d0,Fade_Delay
  543.         dbra    d7,Fade_Loop_1
  544.         rts
  545.  
  546. *** Fade out with Colortable in ^a5 ***
  547.  
  548. Fade_Out    lea    Hilftab,a0
  549.         move.l    #31,d0
  550. Copy_Tab    move.w    (a5)+,(a0)+
  551.         dbra    d0,Copy_Tab
  552.         move.l    #15,d7
  553. FadeOut_Loop_1    lea    HilfTab,a0
  554.         move.l    #31,d0
  555. FadeOut_Loop_2    move.w    (a0),d1
  556.         and.l    #15,d1
  557.         tst.l    d1
  558.         beq    No_Decrease_1
  559.         sub.w    #1,(a0)
  560. No_Decrease_1    move.w    (a0),d1
  561.         lsr.w    #4,d1
  562.         and.l    #15,d1
  563.         tst.l    d1
  564.         beq    No_Decrease_2
  565.         sub.w    #16,(a0)
  566. No_Decrease_2    move.w    (a0),d1
  567.         lsr.w    #8,d1
  568.         and.l    #15,d1
  569.         tst.l    d1
  570.         beq    No_Decrease_3
  571.         sub.w    #256,(a0)
  572. No_Decrease_3    addq.l    #2,a0
  573.         dbra    d0,FadeOut_Loop_2
  574.         lea    HilfTab,a0
  575.         lea    $DFF180,a1
  576.         move.l    #31,d0
  577. FadeOut_Loop_3    move.w    (a0)+,(a1)+
  578.         dbra    d0,FadeOut_Loop_3
  579.         move.l    #$3fff,d0
  580. FadeOut_Delay    dbra    d0,FadeOut_Delay
  581.         dbra    d7,FadeOut_Loop_1
  582.         rts
  583.  
  584. HilfTab        ds.w    32
  585.  
  586. ***** Play a Level *****
  587.  
  588. Play    
  589.         bsr    Get_Ready
  590.         move.l    #3,d0
  591.         sub.l    Difficulty,d0
  592.         move.l    d0,Deleters
  593.         ALLOC    Planesize*Planes,CHIP
  594.         move.l     d0,Plane0
  595.         move.l    PlayPic,a0
  596.         move.l    Plane0,a1
  597.         move.l    #Planesize*4-1,d0
  598. Copy_PlayPic    move.b    (a0)+,(a1)+
  599.         dbra    d0,Copy_PlayPic
  600.         ALLOC    CLSize,CHIP
  601.         move.l    d0,CLadr
  602.         move.l    d0,a0
  603.         move.l    Plane0,d1
  604.         move.w    #BPL1PTH-$DFF000,d3
  605.         move.w    #Planes-1,d4
  606. MakeCL        move.w     d3,(a0)+
  607.         addq.w    #2,d3
  608.         swap    d1
  609.         move.w    d1,(a0)+
  610.         move.w    d3,(a0)+
  611.         addq.w    #2,d3
  612.         swap     d1
  613.         move.w    d1,(a0)+
  614.         add.l    #Planesize,d1
  615.         dbra    d4,MakeCL
  616.         move.l    #$fffffffe,(a0)
  617.         move.l    a0,Target
  618.  
  619.         CALLEXEC Forbid
  620.         
  621.         move.w    #%0000000111100000,DMACONW
  622.         clr.l    SPR0DAT
  623.         move.l    CLAdr,COP1LC
  624.         clr.w    COPJMP1
  625.         move.w    #$3081,DIWSTRT
  626.         move.w     #$30c1,DIWSTOP
  627.         move.w  #$0038,DDFSTRT
  628.         move.w  #$00d0,DDFSTOP
  629.         move.w  #%0101000000000000,BPLCON0
  630.         clr.w    BPLCON1
  631.         clr.w    BPLCON2
  632.         clr.w    BPL1MOD
  633.         clr.w    BPL2MOD
  634.         move.w    #%1000011111011111,DMACONW
  635.         bsr    Clear_Colors
  636.  
  637. *** Init
  638.  
  639. No_deleters    move.l    Plane0,a0
  640.         add.l    #4*Planesize,a0
  641.         add.l    #7*16*40+120,a0
  642.         move.l    #64,d0
  643. Create_Time    move.w    #%0000001111111111,(a0)
  644.         move.w    #%1111111111000000,2(a0)
  645.         add.l    #40,a0
  646.         dbra    d0,Create_Time
  647.         clr.l    Time
  648.         move.l    #8,Time_Split
  649.         clr.l    Float_Flag
  650.         clr.l    Status
  651.         move.l    #4,Splitter
  652.         clr.l    FinishFlag
  653.         clr.l    EscFlag
  654.  
  655.         lea    Level,a0
  656.         lea    Special,a1
  657.         lea    Floats,a2
  658.         move.l    #16*10-1,d0
  659. Clear_Level    clr.b    (a0)+
  660.         clr.b    (a1)+
  661.         clr.b    (a2)+
  662.         dbra    d0,Clear_Level
  663.  
  664.         move.l    Play_Level,d7
  665.         move.l    d7,d6
  666.         lsr.l    #1,d6
  667.         add.l    d6,d7
  668.         cmp.l    #45,d7
  669.         blt.s    OkiDoki_1
  670.         move.l    #45,d7
  671. OkiDoki_1    subq.l    #1,d7
  672. Set_Walls    bsr    RND
  673.         and.l    #15,d0
  674.         move.l    d0,d6
  675. Get_Wall_Y    bsr    RND
  676.         and.l    #15,d0
  677.         cmp.l    #9,d0
  678.         bhi    Get_Wall_Y
  679.         move.l    d0,d1
  680.         move.l    d6,d0
  681.         lea    Level,a0
  682.         add.l    d0,a0
  683.         mulu    #16,d1
  684.         add.l    d1,a0
  685.         move.b    #16,(a0)
  686.         dbra    d7,Set_Walls
  687.  
  688.         move.l    Play_Level,d7
  689.         move.l    d7,d6
  690.         lsr.l    #2,d6
  691.         add.l    d6,d7
  692.         cmp.l    #40,d7
  693.         blt.s    OkiDoki_2
  694.         move.l    #50,d7
  695. OkiDoki_2    subq.l    #1,d7
  696. Set_Specials    bsr    RND
  697.         and.l    #15,d0
  698.         move.l    d0,d6
  699. Get_Special_Y    bsr    RND
  700.         and.l    #15,d0
  701.         cmp.l    #9,d0
  702.         bhi    Get_Special_Y
  703.         move.l    d0,d1
  704.         move.l    d6,d0
  705.         lea    Special,a0
  706.         lea    Level,a1
  707.         add.l    d0,a0
  708.         mulu    #16,d1
  709.         add.l    d1,a0
  710.         add.l    d0,a1
  711.         add.l    d1,a1
  712.         tst.b    (a1)
  713.         bne    Set_Specials
  714.         bsr    RND
  715.         and.l    #3,d0
  716.         bset    #6,d0
  717.         move.b    d0,(a0)
  718.         dbra    d7,Set_Specials
  719.  
  720. Get_Start_X    bsr    RND
  721.         and.l    #15,d0
  722.         beq    Get_Start_X
  723.         cmp.l    #15,d0
  724.         beq    Get_Start_X
  725.         move.l    d0,Start_X
  726.         move.l    d0,Crsr_X
  727. Get_Start_Y    bsr    RND
  728.         and.l    #15,d0
  729.         beq    Get_Start_Y
  730.         cmp.l    #8,d0
  731.         bhi    Get_Start_Y
  732.         move.l    d0,Start_Y
  733.         move.l    d0,Crsr_Y
  734. Get_Start_Dir    bsr    RND
  735.         and.l    #3,d0
  736.         move.l    d0,Float_Dir
  737.         move.l    d0,d1
  738.         lea    Level,a0
  739.         add.l    Start_X,a0
  740.         move.l    Start_Y,d0
  741.         mulu    #16,d0
  742.         add.l    d0,a0
  743.         move.b    #17,(a0)
  744.         clr.b    -17(a0)
  745.         clr.b    -16(a0)
  746.         clr.b    -15(a0)
  747.         clr.b    -1(a0)
  748.         clr.b    1(a0)
  749.         clr.b    15(a0)
  750.         clr.b    16(a0)
  751.         clr.b    17(a0)
  752.         lea    Special,a0
  753.         add.l    Start_X,a0
  754.         move.l    Start_Y,d0
  755.         mulu    #16,d0
  756.         add.l    d0,a0
  757.         move.b    d1,(a0)
  758.         move.l    Start_X,Float_X
  759.         move.l    Start_Y,Float_Y
  760.         clr.l    Float_Count
  761.         clr.l    Float_Pointer
  762.         clr.l    Float_Math
  763.         clr.l    Joy_Revers
  764.  
  765.         lea    Level,a0
  766.         lea    Special,a1
  767.         move.l    #0,d1
  768. Show_Lines    move.l    #0,d0
  769. Show_Field    tst.b    (a0)
  770.         bne    Show_Wall
  771.         tst.b    (a1)
  772.         bne    Show_Special
  773. Next_Show    addq.l    #1,a0
  774.         addq.l    #1,a1
  775.         addq.l    #1,d0
  776.         cmp.l    #16,d0
  777.         bne    Show_Field
  778.         addq.l    #1,d1
  779.         cmp.l    #10,d1
  780.         bne    Show_Lines
  781.         bra    Continue
  782. Show_Wall    movem.l    d0-d7/a0-a6,-(sp)
  783.         move.l    #13,d2
  784.         bsr    Show_Obj
  785.         movem.l    (sp)+,d0-d7/a0-a6
  786.         bra    Next_Show
  787. Show_Special    movem.l    d0-d7/a0-a6,-(sp)
  788.         move.l    #14,d2
  789.         add.b    (a1),d2
  790.         bclr    #6,d2
  791.         bsr    Show_Obj
  792.         movem.l    (sp)+,d0-d7/a0-a6
  793.         bra    Next_Show
  794.  
  795. Continue    move.l    #9,d2
  796.         add.l    Float_Dir,d2
  797.         move.l    Start_X,d0
  798.         move.l    Start_Y,d1
  799.         bsr    Show_Obj
  800.         bsr    Set_Crsr
  801.  
  802.         lea    Next,a0
  803.         move.l    #4,d7
  804. Get_Next    bsr    RND
  805.         and.l    #7,d0
  806.         beq    Get_Next
  807.         move.b    d0,(a0)+
  808.         dbra    d7,Get_Next
  809.         bsr    Display_Next
  810.  
  811.         PRINT    4,1,195,Status_text
  812.         move.l    Play_Level,d2
  813.         bsr    BinDec
  814.         PRINT    4,36,195,Dec_Buffer+6
  815.         clr.l    Num_Specials
  816.         move.l    HOF,d2
  817.         bsr    BinDec
  818.         PRINT    4,21,195,Dec_Buffer+1
  819.  
  820.         move.l    Target,a0
  821.         move.w    #$ffdd,(a0)+
  822.         move.w    #$fffe,(a0)+
  823.         lea    BonusColors,a1
  824.         move.l    #7,d0
  825.         move.l    #$000f,d1
  826. Set_Bonuscolors    move.w    d1,(a0)+
  827.         move.w    #$fffe,(a0)+
  828.         move.w    #$184,(a0)+
  829.         move.w    (a1)+,(a0)+
  830.         add.w    #$0100,d1
  831.         dbra    d0,Set_Bonuscolors
  832.         move.l    #$fffffffe,(a0)
  833.  
  834.         lea    Colors,a5
  835.         bsr    Fade_In
  836.  
  837. Wait        bsr    Show_Score
  838.         bsr    Check_Joy
  839.         bsr    Sub_Time
  840.         bsr    Float
  841.         bsr    Delay
  842.         tst.l    Status
  843.         bne    LevelFinished
  844.         cmp.l    #65,Time
  845.         bge    Level_Ready
  846.         btst    #6,$bfe001
  847.         beq    Pausemode
  848.         move.b    $BFEC01,d0
  849.         cmp.b    #$75,d0
  850.         beq    FastFlowOn
  851.         bra    Wait
  852.  
  853. FastFlowOn    move.l    #1,EscFlag
  854.         bra    Wait
  855.  
  856. Game_Fail
  857. Level_Ready
  858.         move.l    #1,FinishFlag
  859.         bra    Wait
  860. LevelFinished    move.l    Target,a0
  861.         move.l    #$fffffffe,(a0)
  862.         lea    Colors,a5
  863.         bsr    Fade_Out
  864.         move.w    #$7fff,DMACONW
  865.         move.w    #%1000011011110000,DMACONW
  866.         CALLEXEC Permit
  867.         FREE    CLAdr,CLSize
  868.         FREE    Plane0,Planesize*Planes
  869.         rts
  870.     
  871. ***** Subs *****
  872.  
  873. OpenLibs    lea    Intuitionname,a1
  874.         clr.l    d0
  875.         CALLEXEC OpenLibrary
  876.         move.l    d0,_IntuitionBase
  877.         lea    Graphicsname,a1
  878.         clr.l    d0
  879.         CALLEXEC OpenLibrary
  880.         move.l    d0,_GfxBase
  881.         lea    Dosname,a1
  882.         clr.l    d0
  883.         CALLEXEC OpenLibrary
  884.         move.l    d0,_DosBase
  885.         rts
  886. CloseLibs    move.l    _IntuitionBase,a1
  887.         CALLEXEC CloseLibrary
  888.         move.l    _GfxBase,a1
  889.         CALLEXEC CloseLibrary
  890.         move.l    _DosBase,a1
  891.         CALLEXEC CloseLibrary
  892.         rts
  893.  
  894. Intuitionname    dc.b    "intuition.library",0
  895.         EVEN
  896. Graphicsname    dc.b    "graphics.library",0
  897.         EVEN
  898. Dosname        dc.b    "dos.library",0
  899.         EVEN
  900. _IntuitionBase    ds.l    1
  901. _GfxBase    ds.l    1
  902. _DosBase    ds.l    1
  903.  
  904. Pausemode    btst    #6,$bfe001
  905.         beq    Pausemode
  906. pauseloop    btst    #6,$bfe001
  907.         bne    Pauseloop
  908. Pauseloop_2    btst    #6,$bfe001
  909.         beq    Pauseloop_2
  910.         bra    Wait
  911.  
  912. Over        bsr    Clear_Colors
  913.         bsr    Create_Playfield
  914.         lea    GO,a0
  915.         move.l    Plane0,a1
  916.         add.l    #8*40+5,a1
  917.         move.l    #2,d0
  918. go_1        move.l    a1,a2
  919.         move.l    #49,d1
  920. go_2        move.l    a2,a3
  921.         move.l    #29,d2
  922. go_3        move.b    (a0)+,(a3)+
  923.         dbra    d2,go_3
  924.         add.l    #40,a2
  925.         dbra    d1,go_2
  926.         add.l    #Planesize,a1
  927.         dbra    d0,go_1
  928.         lea    GR_Cols,a5
  929.         bsr    Fade_in
  930.         move.l    Target,a0
  931.         move.l    #$800f,d1
  932.         move.l    #$008,d2
  933.         move.l    #$002,d3
  934.         bsr    Rohr
  935.         move.l    #$900f,d1
  936.         move.l    #$888,d2
  937.         move.l    #$222,d3
  938.         bsr    Rohr
  939.         move.l    #$a00f,d1
  940.         move.l    #$080,d2
  941.         move.l    #$020,d3
  942.         bsr    Rohr
  943.         move.l    #$b00f,d1
  944.         move.l    #$800,d2
  945.         move.l    #$200,d3
  946.         bsr    Rohr
  947.         move.l    #$c00f,d1
  948.         move.l    #$880,d2
  949.         move.l    #$220,d3
  950.         bsr    Rohr
  951.         move.l    #$d00f,d1
  952.         move.l    #$880,d2
  953.         move.l    #$220,d3
  954.         bsr    Rohr
  955.         move.l    #$e00f,d1
  956.         move.l    #$880,d2
  957.         move.l    #$220,d3
  958.         bsr    Rohr
  959.         move.w    #$184,(a0)+
  960.         move.w    #$ff0,(a0)+
  961.         move.l    #$fffffffe,(a0)
  962.         PRINT    1,0,80,Overtext_2
  963.         move.l    Score,d2
  964.         bsr    BinDec
  965.         lea    Dec_Buffer+1,a0
  966.         lea    Overtext_9+22,a1
  967.         move.l    #6,d0
  968. Overscore    move.b    (a0)+,(a1)+
  969.         dbra    d0,Overscore
  970.         PRINT    1,0,96,Overtext_9
  971.         move.l    Score,d1
  972.         lea    HOF,a0
  973.         move.l    #0,d0
  974. Compare_Scores    move.l    (a0)+,d2
  975.         add.l    #20,a0
  976.         cmp.l    d1,d2
  977.         blt    Highscore
  978.         addq.l    #1,d0
  979.         cmp.l    #10,d0
  980.         bne    Compare_Scores
  981.         PRINT    1,0,112,Overtext_4
  982.         bra    Overwait
  983. Highscore    sub.l    #24,a0
  984.         cmp.l    #9,d0
  985.         beq    No_Trans
  986.         lea    HOF+9*24,a1
  987.         move.l    #9,d1
  988. Transfer    move.l    -24(a1),(a1)
  989.         move.l    -20(a1),4(a1)
  990.         move.l    -16(a1),8(a1)
  991.         move.l    -12(a1),12(a1)
  992.         move.l    -8(a1),16(a1)
  993.         move.l    -4(a1),20(a1)
  994.         sub.l    #24,a1
  995.         subq.l    #1,d1
  996.         cmp.l    d0,d1
  997.         bne    Transfer
  998. No_Trans    move.l    Score,(a0)+
  999.         move.l    a0,Hiptr
  1000.         PRINT    1,0,112,Overtext_3
  1001.         PRINT    1,0,128,Overtext_5
  1002.         PRINT    1,0,144,Overtext_6
  1003.         PRINT    1,0,160,Overtext_7
  1004.         PRINT    1,0,176,Overtext_8
  1005.         move.l    #0,Crsr_X
  1006.         move.l    #0,Crsr_Y
  1007.         bsr    Set_Highcrsr
  1008.         lea    Hiname,a0
  1009.         move.l    #19,d0
  1010. Clear_Hiname    move.b    #"-",(a0)+
  1011.         dbra    d0,Clear_Hiname
  1012.         clr.b    (a0)
  1013.         move.l    #0,Hipos
  1014. Overloop    move.l    #$ff,d1
  1015.         move.l    #4,d2
  1016. Overloop_2    move.w    VHPOSR,d0
  1017.         lsr.w    #8,d0
  1018.         cmp.b    d1,d0
  1019.         bne    Overloop_2
  1020.         subq.l    #1,d1
  1021.         dbra    d2,Overloop_2
  1022.  
  1023.         bsr    Set_Highcrsr
  1024.         move.w    JOY1DAT,d0
  1025.         btst    #1,d0
  1026.         beq    OverNR
  1027.         addq.l    #1,Crsr_X
  1028.         btst    #0,d0
  1029.         bne    OverY
  1030.         addq.l    #1,Crsr_Y
  1031. OverNR        btst    #0,d0
  1032.         beq    OverY
  1033.         addq.l    #1,Crsr_Y
  1034. OverY        btst    #9,d0
  1035.         beq    OverNL
  1036.         subq.l    #1,Crsr_X
  1037.         btst    #8,d0
  1038.         bne    OverTX
  1039.         subq.l    #1,Crsr_Y
  1040. OverNL        btst    #8,d0
  1041.         beq    OverTX
  1042.         subq.l    #1,Crsr_Y
  1043. OverTX        move.l    Crsr_X,d0
  1044.         bpl    OverNNX1
  1045.         clr.l    Crsr_X
  1046. OverNNX1    cmp.l    #10,d0
  1047.         bne    OverNNX2
  1048.         move.l    #9,Crsr_X
  1049. OverNNX2    move.l    Crsr_Y,d0
  1050.         bpl    OverNNY1
  1051.         clr.l    Crsr_Y
  1052. OverNNY1    cmp.l    #3,d0
  1053.         bne    OverNNY2
  1054.         move.l    #2,Crsr_Y
  1055. OverNNY2    bsr    Set_Highcrsr
  1056.         btst    #7,$bfe001
  1057.         bne    Overloop
  1058.         move.l    Crsr_Y,d0
  1059.         mulu    #10,d0
  1060.         add.l    Crsr_X,d0
  1061.         cmp.l    #29,d0
  1062.         beq    HiEnd
  1063.         cmp.l    #28,d0
  1064.         beq    HiDel
  1065.         cmp.l    #27,d0
  1066.         beq    HiBlank
  1067.         cmp.l    #26,d0
  1068.         beq    HiPoint
  1069.         add.l    #"A",d0
  1070. Push_Char    cmp.l    #20,HiPos
  1071.         beq    OverLoop
  1072.         move.l    HiPos,d1
  1073.         lea    HiName,a0
  1074.         move.b    d0,(a0,d1)
  1075.         addq.l    #1,HiPos
  1076.         PRINT    1,10,128,HiName
  1077.         bra    OverLoop
  1078. HiDel        cmp.l    #0,HiPos
  1079.         beq    OverLoop
  1080.         subq.l    #1,HiPos
  1081.         move.l    HiPos,d1
  1082.         lea    HiName,a0
  1083.         move.b    #"-",(a0,d1)
  1084.         PRINT    1,10,128,HiName
  1085.         bra    OverLoop
  1086. HiBlank        move.b    #" ",d0
  1087.         bra    Push_Char
  1088. HiPoint        move.b    #".",d0
  1089.         bra    Push_Char
  1090.  
  1091. HiEnd        move.b    #"-",HiName+20
  1092.         move.l    Hiptr,a1
  1093.         move.l    #19,d0
  1094. Clear_OldHi    move.b    #" ",(a1)+
  1095.         dbra    d0,Clear_OldHi
  1096.         cmp.b    #"-",HiName
  1097.         bne    Not_EmptyHi
  1098.         move.l    #"UNKN",HiName
  1099.         move.l    #"OWN-",HiName+4
  1100. Not_EmptyHi    lea    HiName,a0
  1101. Search_End    cmp.b    #"-",(a0)+
  1102.         bne    Search_End
  1103.         subq.l    #1,a0
  1104. Copy_HiName    move.b    -(a0),-(a1)
  1105.         cmp.b    #"!",-1(a0)
  1106.         bne    Copy_HiName
  1107.         move.l    Target,a0
  1108.         move.l    #$fffffffe,(a0)
  1109.         lea    GR_Cols,a5
  1110.         bsr    Fade_out
  1111. Real_HiEnd    bsr    Remove_Playfield
  1112.         move.l    #Filen_6,d1
  1113.         move.l    #1006,d2
  1114.         CALLDOS Open
  1115.         tst.l    d0
  1116.         beq    No_SaveHigh
  1117.         move.l    d0,d7
  1118.         move.l    d7,d1
  1119.         move.l    #HOF,d2
  1120.         move.l    #240,d3
  1121.         CALLDOS Write
  1122.         move.l    d7,d1
  1123.         CALLDOS Close
  1124.         move.l    #250,d1
  1125.         CALLDOS Delay
  1126. No_SaveHigh    bra    Title
  1127.  
  1128. Overwait    btst    #7,$bfe001
  1129.         bne    Overwait
  1130.         move.l    Target,a0
  1131.         move.l    #$fffffffe,(a0)
  1132.         lea    GR_Cols,a5
  1133.         bsr    Fade_out
  1134.         bsr    Remove_Playfield
  1135.         bra    Title
  1136. Set_Highcrsr    move.l    Plane0,a0
  1137.         add.l    #256*40+144*40+10,a0
  1138.         move.l    Crsr_x,d0
  1139.         mulu    #2,d0
  1140.         add.l    d0,a0
  1141.         move.l    Crsr_Y,d0
  1142.         mulu    #8*80,d0
  1143.         add.l    d0,a0
  1144.         move.l    #6,d0
  1145. SetFrame    eor.b    #%11111110,(a0)
  1146.         add.l    #40,a0
  1147.         dbra    d0,SetFrame
  1148.         rts
  1149.  
  1150. Rohr        move.l    #3,d0
  1151. Rup        move.w    d1,(a0)+
  1152.         move.w    #$fffe,(a0)+
  1153.         move.w    #$184,(a0)+
  1154.         move.w    d2,(a0)+
  1155.         add.w    #$0100,d1
  1156.         add.w    d3,d2
  1157.         dbra    d0,Rup
  1158.         sub.w    d3,d2
  1159.         move.l    #3,d0
  1160. Rdown        move.w    d1,(a0)+
  1161.         move.w    #$fffe,(a0)+
  1162.         move.w    #$184,(a0)+
  1163.         move.w    d2,(a0)+
  1164.         sub.w    d3,d2
  1165.         add.w    #$0100,d1
  1166.         dbra    d0,Rdown
  1167.         rts
  1168.  
  1169. Good        bsr    Clear_Colors
  1170.         bsr    Create_Playfield
  1171.         lea    NL,a0
  1172.         move.l    Plane0,a1
  1173.         add.l    #40*40+4,a1
  1174.         move.l    #2,d0
  1175. nl_1        move.l    a1,a2
  1176.         move.l    #49,d1
  1177. nl_2        move.l    a2,a3
  1178.         move.l    #30,d2
  1179. nl_3        move.b    (a0)+,(a3)+
  1180.         dbra    d2,nl_3
  1181.         add.l    #40,a2
  1182.         dbra    d1,nl_2
  1183.         add.l    #Planesize,a1
  1184.         dbra    d0,nl_1
  1185.         lea    GR_Cols,a5
  1186.         bsr    Fade_in
  1187.         move.l    Target,a0
  1188.         lea    Goodcols,a1
  1189.         move.l    #$a40f,d1
  1190.         move.l    #39,d0
  1191. nl_4        move.w    d1,(a0)+
  1192.         move.w    #$fffe,(a0)+
  1193.         move.w    #$184,(a0)+
  1194.         move.w    (a1)+,(a0)+
  1195.         add.w    #$0100,d1
  1196.         dbra    d0,nl_4
  1197.         move.l    #$fffffffe,(a0)
  1198.         PRINT    1,0,116,Goodtext_2
  1199.         tst.l    Num_Specials
  1200.         beq    No_SBonus
  1201.         move.l    Num_Specials,d2
  1202.         bsr    BinDec
  1203.         move.b    Dec_Buffer+5,Goodtext_4+15
  1204.         move.b    Dec_Buffer+6,Goodtext_4+16
  1205.         move.b    Dec_Buffer+7,Goodtext_4+17
  1206.         move.l    Play_Level,d0
  1207.         mulu    #50,d0
  1208.         move.l    Num_Specials,d1
  1209.         mulu    d1,d0
  1210.         move.l    d0,d2
  1211.         add.l    d0,Score
  1212.         bsr    BinDec
  1213.         lea    Dec_Buffer+1,a0
  1214.         lea    Goodtext_4+31,a1
  1215.         move.l    #6,d0
  1216. Copy_Bonus    move.b    (a0)+,(a1)+
  1217.         dbra    d0,Copy_Bonus
  1218.         PRINT    1,0,132,Goodtext_3
  1219.         PRINT    1,0,148,Goodtext_4
  1220. No_SBonus
  1221. Good_Wait    btst    #7,$BFE001
  1222.         bne    Good_Wait
  1223.         move.l    Target,a0
  1224.         move.l    #$fffffffe,(a0)
  1225.         lea    GR_Cols,a5
  1226.         bsr    Fade_out
  1227.         bsr    Remove_Playfield
  1228.         rts
  1229.  
  1230. Get_Ready    bsr    Create_Playfield
  1231.         move.l    Play_Level,d2
  1232.         bsr    BinDec
  1233.         cmp.b    #" ",Dec_Buffer+6
  1234.         bne    No_Space
  1235.         move.b    #"0",Dec_Buffer+6
  1236. No_Space    move.l    #"LEVE",Dec_Buffer
  1237.         move.w    #"L ",Dec_Buffer+4
  1238.         lea    GR,a0
  1239.         move.l    Plane0,a1
  1240.         add.l    #15*40+12,a1
  1241.         move.l    #2,d0
  1242. gr_1        move.l    a1,a2
  1243.         move.l    #129,d1
  1244. gr_2        move.l    a2,a3
  1245.         move.l    #16,d2
  1246. gr_3        move.b    (a0)+,(a3)+
  1247.         dbra    d2,gr_3
  1248.         add.l    #40,a2
  1249.         dbra    d1,gr_2
  1250.         add.l    #Planesize,a1
  1251.         dbra    d0,gr_1
  1252.         lea    GR_Cols,a5
  1253.         bsr    Fade_in
  1254.         PRINT    1,16,150,Dec_Buffer
  1255.         move.l    Target,a0
  1256.         lea    GR_Stripes,a1
  1257.         move.w    #$c60f,d1
  1258.         move.l    #23,d0
  1259. gr_4        move.w    d1,(a0)+
  1260.         move.w    #$fffe,(a0)+
  1261.         move.w    #$184,(a0)+
  1262.         move.w    (a1)+,(a0)+
  1263.         add.w    #$0100,d1
  1264.         dbra    d0,gr_4
  1265.         move.l    #$fffffffe,(a0)
  1266. gr_loop1    move.l    #$ffff,d0
  1267. gr_delay    swap    d0
  1268.         swap    d0
  1269.         dbra    d0,gr_delay
  1270.         cmp.l    #1,Difficulty
  1271.         bne.s    gr_no1
  1272.         PRINT    1,0,166,Dif_1
  1273. gr_no1        cmp.l    #2,Difficulty
  1274.         bne.s    gr_no2
  1275.         PRINT    1,0,166,Dif_2
  1276. gr_no2        cmp.l    #3,Difficulty
  1277.         bne.s    gr_no3
  1278.         PRINT    1,0,166,Dif_3
  1279. gr_no3
  1280. gr_wf        move.w    JOY1DAT,d0
  1281.         btst    #1,d0
  1282.         beq.s    gr_noright
  1283.         addq.l    #1,Difficulty
  1284.         cmp.l    #4,Difficulty
  1285.         bne.s    gr_no4
  1286.         move.l    #1,Difficulty
  1287. gr_no4        bra    gr_loop1
  1288. gr_noright    btst    #9,d0
  1289.         beq.s    gr_noleft
  1290.         subq.l    #1,Difficulty
  1291.         bne.s    gr_no0
  1292.         move.l    #3,Difficulty
  1293. gr_no0        bra    gr_loop1
  1294. gr_noleft    btst    #7,$bfe001
  1295.         bne.s    gr_wf
  1296.         move.l    Target,a0
  1297.         move.l    #$fffffffe,(a0)
  1298.         lea    GR_Cols,a5
  1299.         bsr    Fade_out
  1300.         bsr    Remove_Playfield
  1301.         rts
  1302.  
  1303. Create_Playfield
  1304.         move.l  #3*Planesize,d0
  1305.         move.l  #CHIP,d1
  1306.          CALLEXEC AllocMem
  1307.         move.l     d0,Plane0
  1308.         move.l    #CLsize,d0
  1309.         move.l    #Chip,d1
  1310.         CALLEXEC AllocMem
  1311.         move.l    d0,CLadr
  1312.         move.l    d0,a0
  1313.         move.l    Plane0,d1
  1314.         move.w    #BPL1PTH-$DFF000,d3
  1315.         move.w    #3-1,d4
  1316. MakeCL_X    move.w     d3,(a0)+
  1317.         addq.w    #2,d3
  1318.         swap    d1
  1319.         move.w    d1,(a0)+
  1320.         move.w    d3,(a0)+
  1321.         addq.w    #2,d3
  1322.         swap     d1
  1323.         move.w    d1,(a0)+
  1324.         add.l    #Planesize,d1
  1325.         dbra    d4,MakeCL_X
  1326.         move.l    a0,Target
  1327.         move.l    #$fffffffe,(a0)
  1328.         CALLEXEC Forbid
  1329.         move.w    #%0000000111100000,DMACONW
  1330.         clr.l    SPR0DAT
  1331.         move.l    CLadr,COP1LC
  1332.         clr.w    COPJMP1
  1333.         move.w    #$3081,DIWSTRT
  1334.         move.w     #$30c1,DIWSTOP
  1335.         move.w  #$0038,DDFSTRT
  1336.         move.w  #$00d0,DDFSTOP
  1337.         move.w  #%0011000000000000,BPLCON0
  1338.         clr.w    BPLCON1
  1339.         clr.w    BPLCON2
  1340.         clr.w    BPL1MOD
  1341.         clr.w    BPL2MOD
  1342.         move.w    #%1000011111011111,DMACONW
  1343.         move.w    #$000,$dff180
  1344.         move.w    #$000,$dff182
  1345.         move.w    #$000,$dff184
  1346.         move.w    #$000,$dff186
  1347.         move.w    #$000,$dff188
  1348.         move.w    #$000,$dff18a
  1349.         move.w    #$000,$dff18c
  1350.         move.w    #$000,$dff18e
  1351.         rts
  1352.  
  1353. Remove_Playfield
  1354.         move.w    #$7fff,DMACONW
  1355.         move.w    #%1000011011110000,DMACONW
  1356.         CALLEXEC Permit
  1357.         move.l    CLadr,a1
  1358.         move.l    #CLsize,d0
  1359.         CALLEXEC FreeMem
  1360.         move.l  Plane0,a1
  1361.         move.l    #3*Planesize,d0
  1362.         CALLEXEC FreeMem
  1363.         rts
  1364.  
  1365. Float        tst.l    Flow_Flag
  1366.         beq    Flow
  1367.         subq.l    #1,Flow_Delay
  1368.         beq    End_Flow_Delay
  1369.         rts
  1370. End_Flow_Delay    clr.l    Flow_Flag
  1371.         MPRINT    1,1,208,Clear_line
  1372.         rts
  1373. Flow        subq.l    #1,Splitter
  1374.         beq    Real_Float
  1375.         rts
  1376. Real_Float    move.l    #6,d0
  1377.         sub.l    Difficulty,d0
  1378.         move.l    d0,Splitter
  1379.         tst.l    Float_Flag
  1380.         bne    Lets_float
  1381.         rts
  1382. Lets_float    tst.l    Float_Count
  1383.         beq    New_Float
  1384.         subq.l    #1,Float_Count
  1385.         move.l    Plane0,a1
  1386.         add.l    #16*40+6,a1
  1387.         move.l    Float_X,d0
  1388.         mulu    #2,d0
  1389.         add.l    d0,a1
  1390.         move.l    Float_Y,d1
  1391.         mulu    #16*40,d1
  1392.         add.l    d1,a1
  1393.         move.l    #15,d1
  1394.         move.l    Float_Pointer,a0
  1395. Mark_Float    move.w    (a0)+,d0
  1396.         eor.w    #$ffff,d0
  1397.         and.w    d0,(a1)
  1398.         add.l    #Planesize,a1
  1399.         and.w    d0,(a1)
  1400.         add.l    #Planesize,a1
  1401.         and.w    d0,(a1)
  1402.         add.l    #Planesize,a1
  1403.         eor.w    #$ffff,d0
  1404.         or.w    d0,(a1)
  1405.         add.l    #40,a1
  1406.         sub.l    #3*Planesize,a1
  1407.         dbra    d1,Mark_Float
  1408.         tst.l    Float_Math
  1409.         bne    False_Dir_2
  1410.         add.l    #32,Float_Pointer
  1411.         rts
  1412. False_Dir_2    sub.l    #32,Float_Pointer
  1413.         rts
  1414.  
  1415. New_Float    tst.l    Text_Flag
  1416.         beq    No_Text
  1417.         subq.l    #1,Text_Delay
  1418.         bne    No_Text
  1419.         MPRINT    1,1,208,Clear_Line
  1420.         clr.l    Text_Flag
  1421. No_Text        move.l    #1,Delay_Flag
  1422.         move.l    Float_Dir,d4
  1423.         move.l    #8,Float_Count
  1424.         move.l    Float_Dir,d1
  1425.         mulu    #4,d1
  1426.         lea    Float_Add_X1,a0
  1427.         move.l    Float_X,d0
  1428.         add.l    (a0,d1),d0
  1429.         move.l    d0,Float_X
  1430.         lea    Float_Add_Y1,a0
  1431.         move.l    Float_Y,d0
  1432.         add.l    (a0,d1),d0
  1433.         move.l    d0,Float_Y
  1434.         cmp.l    #-1,Float_X
  1435.         beq    Game_Over
  1436.         cmp.l    #-1,Float_Y
  1437.         beq    Game_Over
  1438.         cmp.l    #16,Float_X
  1439.         beq    Game_Over
  1440.         cmp.l    #10,Float_Y
  1441.         beq    Game_Over
  1442.         lea    Level,a0
  1443.         add.l    Float_X,a0
  1444.         move.l    Float_Y,d0
  1445.         mulu    #16,d0
  1446.         add.l    d0,a0
  1447.         lea    Eingang_1,a1
  1448.         lea    Eingang_2,a2
  1449.         clr.l    d0
  1450.         move.b    (a0),d0
  1451.         move.l    d0,d7
  1452.         cmp.b    #7,d0
  1453.         bhi    Game_Over
  1454.         cmp.l    #3,d0
  1455.         beq    Eingang_Ok
  1456.         mulu    #4,d0
  1457.         add.l    d0,a1
  1458.         add.l    d0,a2
  1459.         move.l    Float_Dir,d0
  1460.         move.l    (a1),d1
  1461.         cmp.l    d0,d1
  1462.         beq    Eingang_Ok
  1463.         move.l    (a2),d1
  1464.         cmp.l    d0,d1
  1465.         beq    Eingang_Ok
  1466.         bra    Game_Over
  1467. Eingang_Ok    add.l    #15,Score
  1468.         lea    Floats,a0
  1469.         add.l    Float_X,a0
  1470.         move.l    Float_Y,d0
  1471.         mulu    #16,d0
  1472.         add.l    d0,a0
  1473.         tst.b    (a0)
  1474.         beq    No_Crossbonus
  1475.         MPRINT    1,1,208,Cross_Line
  1476.         add.l    #100,Score
  1477. No_Crossbonus    move.b    #1,(a0)
  1478.         lea    Special,a0
  1479.         add.l    Float_X,a0
  1480.         move.l    Float_Y,d0
  1481.         mulu    #16,d0
  1482.         add.l    d0,a0
  1483.         clr.l    d0
  1484.         move.b    (a0),d0
  1485.         tst.b    d0
  1486.         beq    No_Special
  1487.         addq.l    #1,Num_Specials
  1488.         bclr    #6,d0
  1489.         mulu    #4,d0
  1490.         lea    Special_Jmps_1,a0
  1491.         move.l    (a0,d0),a0
  1492.         movem.l    d0-d7/a0-a6,-(sp)
  1493.         jsr    (a0)
  1494.         movem.l    (sp)+,d0-d7/a0-a6
  1495. No_Special    lea    Ausgang_1,a0
  1496.         lea    Ausgang_2,a1
  1497.         move.l    d7,d6
  1498.         cmp.l    #3,d7
  1499.         beq    Cross
  1500.         mulu    #4,d7
  1501.         add.l    d7,a0
  1502.         add.l    d7,a1
  1503.         lea    Dir_Negations,a2
  1504.         move.l    Float_Dir,d0
  1505.         mulu    #4,d0
  1506.         add.l    d0,a2
  1507.         move.l    (a2),d0
  1508.         move.l    (a0),d1
  1509.         cmp.l    d0,d1
  1510.         bne    New_Dir
  1511.         move.l    (a1),d1
  1512. New_Dir        move.l    d1,Float_Dir
  1513.         cmp.l    #3,d6
  1514.         beq    Cross_2
  1515.         move.l    d1,d0
  1516.         mulu    #4,d0
  1517.         lea    Kind,a0
  1518.         move.l    d6,d5
  1519.         mulu    #4,d5
  1520.         add.l    d5,a0
  1521.         move.l    (a0),d5
  1522.         mulu    #16,d5
  1523.         lea    Zero,a0
  1524.         add.l    d5,a0
  1525.         mulu    #4,d4
  1526.         add.l    d4,a0
  1527.         move.l    (a0),Float_Math
  1528.         cmp.l    #-1,Float_Math
  1529.         beq    Game_Over
  1530.         lea    Float_Ptrs,a0
  1531.         mulu    #4,d6
  1532.         add.l    d6,a0
  1533.         move.l    (a0),Float_Pointer
  1534.         tst.l    Float_Math
  1535.         beq    Ptr_Ok
  1536.         add.l    #7*2*16,Float_Pointer
  1537. Ptr_OK        move.l    PlayFloat,d3
  1538.         add.l    d3,Float_Pointer
  1539.         bra    Float
  1540. Cross        move.l    Float_Dir,d1
  1541.         bra    New_Dir
  1542. Cross_2        lea    Crosskind,a0
  1543.         move.l    Float_Dir,d0
  1544.         mulu    #4,d0
  1545.         add.l    d0,a0
  1546.         lea    Crossptr,a1
  1547.         lea    Crossmath,a2
  1548.         add.l    (a0),a1
  1549.         add.l    (a0),a2
  1550.         move.l    (a1),Float_Pointer
  1551.         move.l    (a2),Float_Math
  1552.         bra    Ptr_OK
  1553. False_Dir    add.l    #8*2*16,Float_Pointer
  1554.         bra    Float
  1555. Game_Over    move.l    FinishFlag,Status
  1556.         addq.l    #1,Status
  1557.         rts
  1558.  
  1559. Special_0    MPRINT    1,1,208,Spec0_Line
  1560.         move.l    #1,Flow_Flag
  1561.         move.l    #60,Flow_Delay
  1562.         rts
  1563.  
  1564. Special_1    MPRINT    1,1,208,Spec1_Line
  1565.         add.l    #500,Score
  1566.         rts
  1567.  
  1568. Special_2    bsr    RND
  1569.         and.l    #15,d0
  1570.         cmp.l    #12,d0
  1571.         bhi    Special_2
  1572.         lea    RND_Jmps,a0
  1573.         mulu    #4,d0
  1574.         move.l    (a0,d0),a0
  1575.         jsr    (a0)
  1576.         rts
  1577.  
  1578. Special_3    MPRINT    1,1,208,Spec3_Line
  1579.         move.l    #1,Time_Flag
  1580.         move.l    #60,Time_Delay
  1581.         rts
  1582.  
  1583. Sub_Time    tst.l    FinishFlag
  1584.         bne    BackAtOnce
  1585.         tst.l    Time_Flag
  1586.         beq    Do_Sub_Time
  1587.         subq.l    #1,Time_Delay
  1588.         beq    End_Time_Delay
  1589.         rts
  1590. End_Time_Delay    clr.l    Time_Flag
  1591.         rts
  1592. Do_Sub_Time    subq.l    #1,Time_Split
  1593.         beq    New_Time
  1594.         rts
  1595. New_Time    move.l    #23,d0
  1596.         move.l    Difficulty,d1
  1597.         lsl.l    #1,d1
  1598.         sub.l    d1,d0
  1599.         move.l    d0,Time_Split
  1600.         addq.l    #1,Time
  1601.         bsr    Show_Time
  1602.         move.l    #28,d0
  1603.         move.l    Play_Level,d1
  1604.         cmp.l    #24,d1
  1605.         blt    No_High
  1606.         move.l    #24,d1
  1607. No_High        move.l    #4,d3
  1608.         sub.l    Difficulty,d3
  1609.         divu    d3,d1
  1610.         and.l    #$ffff,d1
  1611.         sub.l    d1,d0
  1612.         cmp.l    Time,d0
  1613.         beq    Start_Floating
  1614.         rts
  1615. Start_Floating    move.l    #1,Float_Flag
  1616.  
  1617. Show_Time    move.l    Plane0,a0
  1618.         add.l    #4*Planesize,a0
  1619.         add.l    #7*16*40+80,a0
  1620.         move.l    Time,d0
  1621.         mulu    #40,d0
  1622.         add.l    d0,a0
  1623.         clr.l    (a0)
  1624.         rts
  1625.  
  1626. Check_Joy    tst.l    FinishFlag
  1627.         bne    BackAtOnce
  1628.         tst.l    Joy_Flag
  1629.         beq    Do_Joy
  1630.         subq.l    #1,Joy_Delay
  1631.         beq    End_Joy_Delay
  1632.         rts
  1633. End_Joy_Delay    clr.l    Joy_Flag
  1634.         rts
  1635. Do_Joy        bsr    Del_Crsr
  1636.         bsr    Test_Joy
  1637.         bsr    Set_Crsr
  1638.         btst    #7,CIAAPRA
  1639.         beq    Fire
  1640.         clr.l    Fireflag
  1641.         rts
  1642. Fire        cmp.b    #$41,$bfec01
  1643.         bne    No_ch
  1644.         move.l    (sp)+,d0
  1645.         bra    LevelFinished
  1646.  
  1647.         dc.b    "     Yeah, the cheat-mode is around here !!! -AW-     "
  1648.         EVEN
  1649.  
  1650. No_ch        lea    Level,a0
  1651.         add.l    Crsr_X,a0
  1652.         move.l    Crsr_Y,d0
  1653.         mulu    #16,d0
  1654.         add.l    d0,a0
  1655.         cmp.b    #32,(a0)
  1656.         beq    Scroll_Next
  1657.         tst.b    (a0)
  1658.         bne    Maybe_delete
  1659.         clr.l    Fireflag
  1660.         move.b    Next+4,(a0)
  1661.         move.l    Crsr_X,d0
  1662.         move.l    Crsr_Y,d1
  1663.         clr.l    d2
  1664.         move.b    Next+4,d2
  1665.         bsr    Show_Obj
  1666. Scroll_Next    move.b    Next+3,Next+4
  1667.         move.b    Next+2,Next+3
  1668.         move.b    Next+1,Next+2
  1669.         move.b    Next+0,Next+1
  1670. Get_Next_obj    bsr    RND
  1671.         and.l    #7,d0
  1672.         beq    Get_Next_obj
  1673.         move.b    d0,Next
  1674.         bsr    Display_Next
  1675. End_Fire    clr.l    Fireflag
  1676.         rts
  1677.  
  1678. Maybe_delete    cmp.b    #17,(a0)
  1679.         beq    End_Fire
  1680.         tst.l    Deleters
  1681.         beq    End_Fire
  1682.         lea    Floats,a1
  1683.         add.l    Crsr_X,a1
  1684.         move.l    Crsr_Y,d0
  1685.         mulu    #16,d0
  1686.         add.l    d0,a1
  1687.         tst.b    (a1)
  1688.         bne    End_Fire
  1689.         cmp.l    #6,Fireflag
  1690.         beq    Delete_it
  1691.         addq.l    #1,Fireflag
  1692.         rts
  1693. Delete_it    clr.l    Fireflag
  1694.         subq.l    #1,Deleters
  1695.         move.b    #0,(a0)
  1696.         move.l    Crsr_X,d0
  1697.         move.l    Crsr_Y,d1
  1698.         move.l    #0,d2
  1699.         bsr    Show_Obj
  1700.         MPRINT    1,1,208,Delete_Text
  1701.         cmp.l    #250,Score
  1702.         bgt    More_500
  1703.         move.l    #0,Score
  1704.         bra    Fire
  1705. More_500    sub.l    #250,Score
  1706.         bra    Fire
  1707.  
  1708. Set_Crsr    move.l    Plane0,a0
  1709.         add.l    #4*Planesize,a0
  1710.         add.l    #16*40+6,a0
  1711.         move.l    Crsr_X,d0
  1712.         mulu    #2,d0
  1713.         add.l    d0,a0
  1714.         move.l    Crsr_Y,d0
  1715.         mulu    #16*40,d0
  1716.         add.l    d0,a0
  1717.         move.w    #$ffff,(a0)
  1718.         move.w    #$ffff,40(a0)
  1719.         move.w    #$ffff,14*40(a0)
  1720.         move.w    #$ffff,15*40(a0)
  1721.         add.l    #2*40,a0
  1722.         move.l    #11,d0
  1723. Set_Cursor    move.w    #%1100000000000011,(a0)
  1724.         add.l    #40,a0
  1725.         dbra    d0,Set_Cursor
  1726.         rts
  1727.  
  1728. Del_Crsr    move.l    Plane0,a0
  1729.         add.l    #4*Planesize,a0
  1730.         add.l    #16*40+6,a0
  1731.         move.l    Crsr_X,d0
  1732.         mulu    #2,d0
  1733.         add.l    d0,a0
  1734.         move.l    Crsr_Y,d0
  1735.         mulu    #16*40,d0
  1736.         add.l    d0,a0
  1737.         move.l    #15,d0
  1738. Del_Cursor    clr.w    (a0)
  1739.         add.l    #40,a0
  1740.         dbra    d0,Del_Cursor
  1741.         rts
  1742.  
  1743. Test_Joy    clr.l    Change_X
  1744.         clr.l    Change_Y
  1745.         move.w    JOY1DAT,d0
  1746.         btst    #1,d0
  1747.         beq    Not_Right
  1748.         addq.l    #1,Crsr_X
  1749.         move.l    #-2,Change_X
  1750.         btst    #0,d0
  1751.         bne    Joy_Y
  1752.         addq.l    #1,Crsr_Y
  1753.         move.l    #-2,Change_Y
  1754. Not_Right    btst    #0,d0
  1755.         beq    Joy_Y
  1756.         addq.l    #1,Crsr_Y
  1757.         move.l    #-2,Change_Y
  1758. Joy_Y        btst    #9,d0
  1759.         beq    Not_Left
  1760.         subq.l    #1,Crsr_X
  1761.         move.l    #2,Change_X
  1762.         btst    #8,d0
  1763.         bne    Tst_X
  1764.         subq.l    #1,Crsr_Y
  1765.         move.l    #2,Change_Y
  1766. Not_Left    btst    #8,d0
  1767.         beq    Tst_X
  1768.         subq.l    #1,Crsr_Y
  1769.         move.l    #2,Change_Y
  1770. Tst_X        tst.l    Joy_Revers
  1771.         beq    No_Revers
  1772.         move.l    Change_X,d0
  1773.         add.l    d0,Crsr_X
  1774.         move.l    Change_Y,d0
  1775.         add.l    d0,Crsr_Y
  1776. No_Revers    move.l    Crsr_X,d0
  1777.         bpl    Not_NegX
  1778.         clr.l    Crsr_X
  1779. Not_NegX    cmp.l    #15,d0
  1780.         ble    Tst_Y
  1781.         move.l    #15,Crsr_X
  1782. Tst_Y        move.l    Crsr_Y,d0
  1783.         bpl    Not_NegY
  1784.         clr.l    Crsr_Y
  1785. Not_NegY    cmp.l    #9,d0
  1786.         ble    End_Joy
  1787.         move.l    #9,Crsr_Y
  1788. End_Joy        rts
  1789.  
  1790. Delay        tst.l    FinishFlag
  1791.         bne    FastFlow
  1792.         tst.l    EscFlag
  1793.         bne    FastFlow
  1794.         tst.l    Delay_Flag
  1795.         bne    Short_One
  1796.         move.l    #11,d0
  1797.         move.l    Difficulty,d1
  1798.         sub.l    d1,d0
  1799.         bra    Delay_Loop_1
  1800. Short_One    clr.l    Delay_Flag
  1801.         move.l    #7,d0
  1802.         sub.l    Difficulty,d0
  1803.         bra    Delay_Loop_1
  1804. FastFlow    move.l    #1,d0
  1805.         bra    Delay_Loop_1
  1806. Delay_Loop_1    move.l    #$fff,d1
  1807. Delay_Loop_2    dbra    d1,Delay_Loop_2
  1808.         dbra    d0,Delay_Loop_1
  1809. BackAtOnce    rts
  1810.  
  1811. Show_Obj    move.l    Plane0,a0
  1812.         add.l    #16*40+6,a0
  1813.         mulu    #2,d0
  1814.         add.l    d0,a0
  1815.         mulu    #16*40,d1
  1816.         add.l    d1,a0
  1817.         move.l    PlayObj,a1
  1818.         mulu    #4*2*16,d2
  1819.         add.l    d2,a1
  1820.         move.l    #3,d7
  1821. Display_Obj    move.l    a0,a2
  1822.         move.l    #15,d6
  1823. Show_Obj_Plane    move.w    (a1)+,(a2)
  1824.         add.l    #40,a2
  1825.         dbra    d6,Show_Obj_Plane
  1826.         add.l    #Planesize,a0
  1827.         dbra    d7,Display_Obj
  1828.         rts
  1829.  
  1830. Display_Next    lea    Next,a5
  1831.         move.l    Plane0,a4
  1832.         add.l    #14*40+1,a4
  1833.         move.l    #4,d7
  1834. Show_Next    clr.l    d0
  1835.         move.b    (a5)+,d0
  1836.         mulu    #4*2*16,d0
  1837.         move.l    PlayObj,a0
  1838.         add.l    d0,a0
  1839.         move.l    a4,a3
  1840.         move.l    #3,d6
  1841. Copy_Next    move.l    a3,a2
  1842.         move.l    #15,d5
  1843. Copy_Next_Plane    move.b    (a0)+,(a2)
  1844.         move.b    (a0)+,1(a2)
  1845.         add.l    #40,a2
  1846.         dbra    d5,Copy_Next_Plane
  1847.         add.l    #Planesize,a3
  1848.         dbra    d6,Copy_Next
  1849.         add.l    #16*40,a4
  1850.         dbra    d7,Show_Next
  1851.         rts
  1852.  
  1853. RND        move.w    $dff006,d0
  1854.         lsr.w    #8,d0
  1855.         move.w    $dff006,d1
  1856.         lsr.w    #1,d1
  1857.         eor.l    d1,d0
  1858.         move.w    $dff006,d1
  1859.         lsr.w    #5,d1
  1860.         eor.l    d1,d0
  1861.         move.w    $dff006,d1
  1862.         lsr.w    #3,d1
  1863.         eor.l    d1,d0
  1864.         rts
  1865.  
  1866. Show_Score    move.l    Score,d2
  1867.         bsr    BinDec
  1868.         PRINT    4,7,195,Dec_Buffer+1
  1869.         rts
  1870.  
  1871. BinDec        move.l    #7,d0
  1872.         lea    Dec_Buffer,a0
  1873.         lea    pwrof10,a1
  1874. BD_Next        move.l    #"0",d1
  1875. Dec        add.l    #1,d1
  1876.         sub.l    (a1),d2
  1877.         bcc    Dec
  1878.         subq.l    #1,d1
  1879.         add.l    (a1),d2
  1880.         move.b    d1,(a0)+
  1881.         lea    4(a1),a1
  1882.         dbra    d0,BD_Next
  1883.         lea    Dec_Buffer,a0
  1884.         move.l    #6,d0
  1885. Del_Zeros    cmp.b    #"0",(a0)
  1886.         bne    End_Del_Zeros
  1887.         move.b    #" ",(a0)+
  1888.         dbra    d0,Del_Zeros
  1889. End_Del_Zeros    rts
  1890.  
  1891. Print_Text    clr.l    d0
  1892.         move.b    (a0)+,d0
  1893.         tst.l    d0
  1894.         beq    EOT
  1895.         sub.b    #$20,d0
  1896.         mulu    #8,d0
  1897.         move.l    PlayFont,a2
  1898.         add.l    d0,a2
  1899.         move.l    a1,a3
  1900.         move.l    #7,d1
  1901. Copy_Char    move.b    (a2)+,(a3)
  1902.         add.l    #40,a3
  1903.         dbra    d1,Copy_Char
  1904.         addq.l    #1,a1
  1905.         bra    Print_Text
  1906. EOT        rts
  1907.  
  1908. S0        bsr    Check_Room
  1909.         tst.l    d0
  1910.         beq    Ok_2
  1911.         bra    S1
  1912. Ok_2        MPRINT    1,1,208,S0_Text
  1913. Set        bsr    RND
  1914.         and.l    #15,d0
  1915.         move.l    d0,d6
  1916. SGet_Wall_Y    bsr    RND
  1917.         and.l    #15,d0
  1918.         cmp.l    #9,d0
  1919.         bhi    SGet_Wall_Y
  1920.         move.l    d0,d1
  1921.         move.l    d6,d0
  1922.         lea    Level,a0
  1923.         add.l    d0,a0
  1924.         mulu    #16,d1
  1925.         add.l    d1,a0
  1926.         tst.b    (a0)
  1927.         bne    Set
  1928.         move.b    #16,(a0)
  1929.         divu    #16,d1
  1930.         move.l    #13,d2
  1931.         bsr    Show_Obj
  1932.         rts
  1933.  
  1934. Check_Room    lea    Level,a0
  1935.         move.l    #16*10-1,d0
  1936.         clr.l    d1
  1937. Count_Free    cmp.b    #0,(a0)
  1938.         bne    No_Blank
  1939.         addq.l    #1,d1
  1940. No_Blank    addq.l    #1,a0
  1941.         dbra    d0,Count_Free
  1942.         cmp.l    #50,d1
  1943.         bls    No_Room
  1944.         clr.l    d0
  1945.         rts
  1946. No_Room        move.l    #1,d0
  1947.         rts
  1948.  
  1949. S1        MPRINT    1,1,208,S1_Text
  1950.         add.l    #600,Score
  1951.         rts
  1952.  
  1953. S2        bsr    Check_Room
  1954.         tst.l    d0
  1955.         beq    Ok_1
  1956.         bra    S1
  1957. Ok_1        MPRINT    1,1,208,S2_Text
  1958. Set_2        bsr    RND
  1959.         and.l    #15,d0
  1960.         move.l    d0,d6
  1961. Get_Hole_Y    bsr    RND
  1962.         and.l    #15,d0
  1963.         cmp.l    #9,d0
  1964.         bhi    Get_Hole_Y
  1965.         move.l    d0,d1
  1966.         move.l    d6,d0
  1967.         lea    Level,a0
  1968.         add.l    d0,a0
  1969.         mulu    #16,d1
  1970.         add.l    d1,a0
  1971.         tst.b    (a0)
  1972.         bne    Set_2
  1973.         move.b    #32,(a0)
  1974.         divu    #16,d1
  1975.         move.l    Plane0,a0
  1976.         add.l    #16*40+6,a0
  1977.         mulu    #2,d0
  1978.         add.l    d0,a0
  1979.         mulu    #16*40,d1
  1980.         add.l    d1,a0
  1981.         move.l    #15,d0
  1982. Set_Black_Hole    clr.w    (a0)
  1983.         add.l    #Planesize,a0
  1984.         clr.w    (a0)
  1985.         add.l    #Planesize,a0
  1986.         clr.w    (a0)
  1987.         add.l    #Planesize,a0
  1988.         clr.w    (a0)
  1989.         sub.l    #3*Planesize,a0
  1990.         add.l    #40,a0
  1991.         dbra    d0,Set_Black_Hole
  1992.         rts
  1993.  
  1994. S3        MPRINT    1,1,208,S3_Text
  1995.         rts
  1996.  
  1997. S4        MPRINT    1,1,208,S4_Text
  1998.         move.l    #1,Time_Flag
  1999.         move.l    #60,Time_Delay
  2000.         rts
  2001.  
  2002. S5        MPRINT    1,1,208,S5_Text
  2003.         move.l    #1,Flow_Flag
  2004.         move.l    #60,Flow_Delay
  2005.         rts
  2006.  
  2007. S6        MPRINT    1,1,208,S6_Text
  2008.         cmp.l    #200,Score
  2009.         bls    Gets_Zero
  2010.         sub.l    #200,Score
  2011.         rts
  2012. Gets_Zero    clr.l    Score
  2013.         rts
  2014.  
  2015. S7        MPRINT    1,1,208,S7_Text
  2016.         rts
  2017.  
  2018. S8        MPRINT    1,1,208,S8_Text
  2019.         move.l    #1,Joy_Flag
  2020.         move.l    #60,Joy_Delay
  2021.         rts
  2022.  
  2023. S9        MPRINT    1,1,208,S9_Text
  2024.         move.l    #1,Joy_Revers
  2025.         rts
  2026.  
  2027. S10        MPRINT    1,1,208,S10_Text
  2028.         move.l    #0,d1
  2029.         lea    Level,a0
  2030. Delete_Loop    move.l    #0,d0
  2031. Delete_L2    cmp.b    #16,(a0)
  2032.         bne    No_Wall
  2033.         clr.b    (a0)
  2034.         movem.l    d0-d7/a0-a6,-(sp)
  2035.         move.l    #0,d2
  2036.         bsr    Show_Obj
  2037.         movem.l    (sp)+,d0-d7/a0-a6
  2038. No_Wall        addq.l    #1,a0
  2039.         addq.l    #1,d0
  2040.         cmp.l    #16,d0
  2041.         bne    Delete_L2
  2042.         addq.l    #1,d1
  2043.         cmp.l    #10,d1
  2044.         bne    Delete_Loop
  2045.         rts
  2046.  
  2047. S11        MPRINT    1,1,208,S11_Text
  2048.         move.l    #0,d1
  2049.         lea    Level,a0
  2050.         lea    Special,a1
  2051. Change_Loop    move.l    #0,d0
  2052. Change_L2    cmp.b    #16,(a0)
  2053.         bne    No_Wall_2
  2054.         movem.l    d0-d7/a0-a6,-(sp)
  2055.         bsr    RND
  2056.         and.l    #3,d0
  2057.         cmp.l    #1,d0
  2058.         bne    No_Change
  2059.         movem.l    (sp)+,d0-d7/a0-a6
  2060.         movem.l    d0-d7/a0-a6,-(sp)
  2061.         clr.b    (a0)
  2062.         move.b    #64+1,(a1)
  2063.         move.l    #15,d2
  2064.         bsr    Show_Obj
  2065. No_Change    movem.l    (sp)+,d0-d7/a0-a6
  2066. No_Wall_2    addq.l    #1,a0
  2067.         addq.l    #1,a1
  2068.         addq.l    #1,d0
  2069.         cmp.l    #16,d0
  2070.         bne    Change_L2
  2071.         addq.l    #1,d1
  2072.         cmp.l    #10,d1
  2073.         bne    Change_Loop
  2074.         rts
  2075.  
  2076. S12        MPRINT    1,1,208,S12_Text
  2077.         move.w    #$700,$DFF180+16
  2078.         rts
  2079.  
  2080. *** Replay-routine taken from SOUNDTRACKER and converted to DevPac ***
  2081.  
  2082. start:    bsr.s    start_muzak
  2083.     rts
  2084.  
  2085. start_muzak:
  2086.     move.l    #data,muzakoffset
  2087.  
  2088. init0:    move.l    muzakoffset,a0
  2089.     add.l    #472,a0
  2090.     move.l    #$80,d0
  2091.     clr.l    d1
  2092. init1:    move.l    d1,d2
  2093.     subq.w    #1,d0
  2094. init2:    move.b    (a0)+,d1
  2095.     cmp.b    d2,d1
  2096.     bgt.s    init1
  2097.     dbf    d0,init2
  2098.     addq.b    #1,d2
  2099.  
  2100. init3:    move.l    muzakoffset,a0
  2101.     lea    pointers(pc),a1
  2102.     lsl.l    #8,d2
  2103.     lsl.l    #2,d2
  2104.     add.l    #600,d2
  2105.     add.l    a0,d2
  2106.     moveq    #14,d0
  2107. init4:    move.l    d2,(a1)+
  2108.     clr.l    d1
  2109.     move.w    42(a0),d1
  2110.     lsl.l    #1,d1
  2111.     add.l    d1,d2
  2112.     add.l    #30,a0
  2113.     dbf    d0,init4
  2114.  
  2115. init5:    clr.w    $dff0a8
  2116.     clr.w    $dff0b8
  2117.     clr.w    $dff0c8
  2118.     clr.w    $dff0d8
  2119.     clr.w    timpos
  2120.     clr.l    trkpos
  2121.     clr.l    patpos
  2122.  
  2123. init6:    move.l    muzakoffset,a0
  2124.     move.b    470(a0),numpat+1
  2125.     move.l    $6c.w,lev3save+2
  2126.     move.l    #lev3interrupt,$6c.w
  2127.     rts
  2128.  
  2129. stop_muzak:
  2130.     move.l    lev3save+2,$6c.w
  2131.     clr.w    $dff0a8
  2132.     clr.w    $dff0b8
  2133.     clr.w    $dff0c8
  2134.     clr.w    $dff0d8
  2135.     move.w    #$f,$dff096
  2136.     rts
  2137.  
  2138. lev3interrupt:
  2139.     bsr.s    replay_muzak
  2140. lev3save:
  2141.     jmp    $0
  2142.  
  2143. replay_muzak:
  2144.     movem.l    d0-d7/a0-a6,-(a7)
  2145.     addq.w    #1,timpos
  2146. speed:    cmp.w    #6,timpos
  2147.     beq.w    replaystep
  2148.  
  2149. chaneleffects:
  2150.     lea    datach0(pc),a6
  2151.     tst.b    3(a6)
  2152.     beq.s    ceff1
  2153.     lea    $dff0a0,a5
  2154.     bsr.s    ceff5
  2155. ceff1:    lea    datach1(pc),a6
  2156.     tst.b    3(a6)
  2157.     beq.s    ceff2
  2158.     lea    $dff0b0,a5
  2159.     bsr.s    ceff5
  2160. ceff2:    lea    datach2(pc),a6
  2161.     tst.b    3(a6)
  2162.     beq.s    ceff3
  2163.     lea    $dff0c0,a5
  2164.     bsr.s    ceff5
  2165. ceff3:    lea    datach3(pc),a6
  2166.     tst.b    3(a6)
  2167.     beq.s    ceff4
  2168.     lea    $dff0d0,a5
  2169.     bsr.s    ceff5
  2170. ceff4:    movem.l    (a7)+,d0-d7/a0-a6
  2171.     rts
  2172.  
  2173. ceff5:    move.b    2(a6),d0
  2174.     and.b    #$f,d0
  2175.     tst.b    d0
  2176.     beq.s    arpreggiato
  2177.     cmp.b    #1,d0
  2178.     beq.w    pitchup
  2179.     cmp.b    #2,d0
  2180.     beq.w    pitchdown
  2181.     cmp.b    #12,d0
  2182.     beq.w    setvol
  2183.     cmp.b    #14,d0
  2184.     beq.w    setfilt
  2185.     cmp.b    #15,d0
  2186.     beq.w    setspeed
  2187.     rts
  2188.  
  2189. arpreggiato:
  2190.     cmp.w    #1,timpos
  2191.     beq.s    arp1
  2192.     cmp.w    #2,timpos
  2193.     beq.s    arp2
  2194.     cmp.w    #3,timpos
  2195.     beq.s    arp3
  2196.     cmp.w    #4,timpos
  2197.     beq.s    arp1
  2198.     cmp.w    #5,timpos
  2199.     beq.s    arp2
  2200.     rts
  2201.  
  2202. arp1:    clr.l    d0
  2203.     move.b    3(a6),d0
  2204.     lsr.b    #4,d0
  2205.     bra.s    arp4
  2206. arp2:    clr.l    d0
  2207.     move.b    3(a6),d0
  2208.     and.b    #$f,d0
  2209.     bra.s    arp4
  2210. arp3:    move.w    16(a6),d2
  2211.     bra.s    arp6
  2212. arp4:    lsl.w    #1,d0
  2213.     clr.l    d1
  2214.     move.w    16(a6),d1
  2215.     lea    notetable,a0
  2216. arp5:    move.w    (a0,d0.w),d2
  2217.     cmp.w    (a0),d1
  2218.     beq.s    arp6
  2219.     addq.l    #2,a0
  2220.     bra.s    arp5
  2221. arp6:    move.w    d2,6(a5)
  2222.     rts
  2223.  
  2224. pitchdown:
  2225.     bsr.s    newrou
  2226.     clr.l    d0
  2227.     move.b    3(a6),d0
  2228.     and.b    #$f,d0
  2229.     add.w    d0,(a4)
  2230.     cmp.w    #$358,(a4)
  2231.     bmi.s    ok1
  2232.     move.w    #$358,(a4)
  2233. ok1:    move.w    (a4),6(a5)
  2234.     rts
  2235.  
  2236. pitchup:bsr.s    newrou
  2237.     clr.l    d0
  2238.     move.b    3(a6),d0
  2239.     and.b    #$f,d0
  2240.     sub.w    d0,(a4)
  2241.     cmp.w    #$71,(a4)
  2242.     bpl.s    ok2
  2243.     move.w    #$71,(a4)
  2244. ok2:    move.w    (a4),6(a5)
  2245.     rts
  2246.  
  2247. setvol:    move.b    3(a6),8(a5)
  2248.     rts
  2249.  
  2250. setfilt:move.b    3(a6),d0
  2251.     and.b    #1,d0
  2252.     lsl.b    #1,d0
  2253.     and.b    #$fd,$bfe001
  2254.     or.b    d0,$bfe001
  2255.     rts
  2256.  
  2257. setspeed:
  2258.     clr.l    d0
  2259.     move.b    3(a6),d0
  2260.     and.b    #$f,d0
  2261.     move.w    d0,speed+2
  2262.     rts
  2263.  
  2264. newrou:    cmp.l    #datach0,a6
  2265.     bne.s    next1
  2266.     lea    voi1(pc),a4
  2267.     rts
  2268. next1:    cmp.l    #datach1,a6
  2269.     bne.s    next2
  2270.     lea    voi2(pc),a4
  2271.     rts
  2272. next2:    cmp.l    #datach2,a6
  2273.     bne.s    next3
  2274.     lea    voi3(pc),a4
  2275.     rts
  2276. next3:    lea    voi4(pc),a4
  2277.     rts
  2278.  
  2279. replaystep:
  2280.     clr.w    timpos
  2281.     move.l    muzakoffset,a0
  2282.     move.l    a0,a3
  2283.     add.l    #12,a3
  2284.     move.l    a0,a2
  2285.     add.l    #472,a2
  2286.     add.l    #600,a0
  2287.     clr.l    d1
  2288.     move.l    trkpos,d0
  2289.     move.b    (a2,d0),d1
  2290.     lsl.l    #8,d1
  2291.     lsl.l    #2,d1
  2292.     add.l    patpos,d1
  2293.     clr.w    enbits
  2294.     lea    $dff0a0,a5
  2295.     lea    datach0(pc),a6
  2296.     bsr.w    chanelhandler
  2297.     lea    $dff0b0,a5
  2298.     lea    datach1(pc),a6
  2299.     bsr.w    chanelhandler
  2300.     lea    $dff0c0,a5
  2301.     lea    datach2(pc),a6
  2302.     bsr.w    chanelhandler
  2303.     lea    $dff0d0,a5
  2304.     lea    datach3(pc),a6
  2305.     bsr.w    chanelhandler
  2306.     move.w    #400,d0
  2307. rep1:    dbf    d0,rep1
  2308.     move.w    #$8000,d0
  2309.     or.w    enbits,d0
  2310.     move.w    d0,$dff096
  2311.     cmp.w    #1,datach0+14
  2312.     bne.s    rep2
  2313.     clr.w    datach0+14
  2314.     move.w    #1,$dff0a4
  2315. rep2:    cmp.w    #1,datach1+14
  2316.     bne.s    rep3
  2317.     clr.w    datach1+14
  2318.     move.w    #1,$dff0b4
  2319. rep3:    cmp.w    #1,datach2+14
  2320.     bne.s    rep4
  2321.     clr.w    datach2+14
  2322.     move.w    #1,$dff0c4
  2323. rep4:    cmp.w    #1,datach3+14
  2324.     bne.s    rep5
  2325.     clr.w    datach3+14
  2326.     move.w    #1,$dff0d4
  2327.  
  2328. rep5:    add.l    #16,patpos
  2329.     cmp.l    #64*16,patpos
  2330.     bne.s    rep6
  2331.     clr.l    patpos
  2332.     addq.l    #1,trkpos
  2333.     clr.l    d0
  2334.     move.w    numpat,d0
  2335.     cmp.l    trkpos,d0
  2336.     bne.s    rep6
  2337.     clr.l    trkpos
  2338. rep6:    movem.l    (a7)+,d0-d7/a0-a6
  2339.     rts
  2340.  
  2341. chanelhandler:
  2342.     move.l    (a0,d1.l),(a6)
  2343.     addq.l    #4,d1
  2344.     clr.l    d2
  2345.     move.b    2(a6),d2
  2346.     lsr.b    #4,d2
  2347.     beq.s    chan2
  2348.     move.l    d2,d4
  2349.     lsl.l    #2,d2
  2350.     mulu    #30,d4
  2351.     lea    pointers-4(pc),a1
  2352.     move.l    (a1,d2.l),4(a6)
  2353.     move.w    (a3,d4.l),8(a6)
  2354.     move.w    2(a3,d4.l),18(a6)
  2355.  
  2356.     move.l    d0,-(a7)
  2357.     move.b    2(a6),d0
  2358.     and.b    #$f,d0
  2359.     cmp.b    #$c,d0
  2360.     bne.s    ok3
  2361.     move.b    3(a6),8(a5)
  2362.     bra.s    ok4
  2363. ok3:    move.w    2(a3,d4.l),8(a5)
  2364. ok4:    move.l    (a7)+,d0
  2365.  
  2366.     clr.l    d3
  2367.     move.w    4(a3,d4),d3
  2368.     add.l    4(a6),d3
  2369.     move.l    d3,10(a6)
  2370.     move.w    6(a3,d4),14(a6)
  2371.     cmp.w    #1,14(a6)
  2372.     beq.s    chan2
  2373.     move.l    10(a6),4(a6)
  2374.     move.w    6(a3,d4),8(a6)
  2375. chan2:    tst.w    (a6)
  2376.     beq.s    chan4
  2377.     move.w    22(a6),$dff096
  2378.     tst.w    14(a6)
  2379.     bne.s    chan3
  2380.     move.w    #1,14(a6)
  2381. chan3:    bsr.w    newrou
  2382.     move.w    (a6),(a4)
  2383.     move.w    (a6),16(a6)
  2384.     move.l    4(a6),0(a5)
  2385.     move.w    8(a6),4(a5)
  2386.     move.w    (a6),6(a5)
  2387.     move.w    22(a6),d0
  2388.     or.w    d0,enbits
  2389.     move.w    18(a6),20(a6)
  2390. chan4:    rts
  2391.  
  2392. datach0:    ds.w    11
  2393.         dc.w    1
  2394. datach1:    ds.w    11
  2395.         dc.w    2
  2396. datach2:    ds.w    11
  2397.         dc.w    4
  2398. datach3:    ds.w    11
  2399.         dc.w    8
  2400. voi1:        dc.w    0
  2401. voi2:        dc.w    0
  2402. voi3:        dc.w    0
  2403. voi4:        dc.w    0
  2404. pointers:    ds.l    15
  2405. notetable:    dc.w    856,808,762,720,678,640,604,570
  2406.         dc.w    538,508,480,453,428,404,381,360
  2407.         dc.w    339,320,302,285,269,254,240,226  
  2408.         dc.w    214,202,190,180,170,160,151,143
  2409.         dc.w    135,127,120,113,000
  2410. muzakoffset:    dc.l    0
  2411. trkpos:        dc.l    0
  2412. patpos:        dc.l    0
  2413. numpat:        dc.w    0
  2414. enbits:        dc.w    0
  2415. timpos:        dc.w    0
  2416. data:        INCBIN    "Pipeline_II:Pipeline_II/data/Pipesong.MUS"
  2417.  
  2418. ***** Vars *****
  2419.  
  2420. Plane0        ds.l    1
  2421. CLadr        ds.l    1        
  2422. Colors        dc.w    $000,$ddd,$555,$888,$aaa,$f12,$a00,$700
  2423.         dc.w    $dd0,$050,$080,$0f0,$00e,$55f,$99f,$c08
  2424.         dc.w    $fff,$fff,$fff,$fff,$fff,$fff,$fff,$fff
  2425.         dc.w    $fff,$fff,$fff,$fff,$fff,$fff,$fff,$fff
  2426. Crsr_X        dc.l    0
  2427. Crsr_Y        dc.l    0
  2428. Start_X        dc.l    0
  2429. Start_Y        dc.l    0
  2430. PlayPic        dc.l    0
  2431. PlayObj        dc.l    0
  2432. PlayFloat    dc.l    0
  2433. PlayFont    dc.l    0
  2434. PipeLogo    dc.l    0
  2435. PipeCluster    dc.l    0
  2436. Time        dc.l    0
  2437. Time_Split    dc.l    0
  2438. Float_Flag    dc.l    0
  2439. Float_X        dc.l    0
  2440. Float_Y        dc.l    0
  2441. Float_Dir    dc.l    0
  2442. Float_Count    dc.l    0
  2443. Float_Math    dc.l    0
  2444. Float_Pointer    dc.l    0
  2445. Float_Add_X1    dc.l    0,1,0,-1
  2446. Float_Add_Y1    dc.l    -1,0,1,0
  2447. Status        dc.l    0
  2448. Eingang_1    dc.l    -1,0,3,-1,2,3,3,1
  2449. Eingang_2    dc.l    -1,2,1,-1,1,2,0,0
  2450. Ausgang_1    dc.l    -1,0,1,-1,0,0,1,3
  2451. Ausgang_2    dc.l    -1,2,3,-1,3,1,2,2
  2452. Dir_Negations    dc.l    2,3,0,1
  2453. Kind        dc.l    -1,5,4,-1,0,3,2,1
  2454. Zero        dc.l    -1,0,1,-1
  2455. One        dc.l    1,0,-1,-1
  2456. Two        dc.l    0,-1,-1,1
  2457. Three        dc.l    -1,-1,0,1
  2458. Four        dc.l    -1,0,-1,1
  2459. Five        dc.l    1,-1,0,-1
  2460. Float_Ptrs    dc.l    -1,5*256,4*256,-1,0*256,3*256,2*256,1*256
  2461. Splitter    dc.l    0
  2462. RND_Counter    ds.l    1
  2463. Crosskind    dc.l    0,4,8,12
  2464. Crossptr    dc.l    5*256+7*32,4*256,5*256,4*256+7*32
  2465. Crossmath    dc.l    1,0,0,1
  2466. Play_Level    ds.l    1
  2467. pwrof10        dc.l    10000000
  2468.         dc.l    1000000
  2469.         dc.l    100000
  2470.         dc.l    10000
  2471.         dc.l    1000
  2472.         dc.l    100
  2473.         dc.l    10
  2474.         dc.l    1
  2475. Score        ds.l    1
  2476. BonusColors    dc.w    $990,$bb0,$dd0,$ff0,$dd0,$bb0,$990,$555
  2477. Special_Jmps_1    dc.l    Special_0,Special_1,Special_2,Special_3
  2478. Target        ds.l    1
  2479. Scrollptr    ds.l    1
  2480. Scrflag        ds.l    1
  2481. Flashdir    ds.w    1
  2482. Flashcol    ds.w    1
  2483. Hiptr        ds.l    1
  2484. Hipos        ds.l    1
  2485. FinishFlag    ds.l    1
  2486. EscFlag        ds.l    1
  2487. OldWindow    ds.l    1
  2488.  
  2489. *** Buffers
  2490.  
  2491. Level        ds.b    20*20
  2492. Special        ds.b    20*20
  2493. Floats        ds.b    20*20
  2494. Next        ds.b    8
  2495. Dec_Buffer    ds.b    16
  2496. Delay_Flag    ds.l    1
  2497. Flow_Flag    ds.l    1
  2498. Flow_Delay    ds.l    1
  2499. Time_Flag    ds.l    1
  2500. Time_Delay    ds.l    1
  2501. Num_Specials    ds.l    1
  2502. Difficulty    ds.l    1
  2503. GR_Cols        dc.w    $000,$440,$ff0,$dd0,$bb0,$990,$770,$550
  2504.         ds.w    24
  2505. gr_stripes    dc.w    $f22,$f44,$f66,$f88,$faa,$fcc,$fee,$fff
  2506.         ds.w    8
  2507.         dc.w    $f2f,$f4f,$f6f,$f8f,$faf,$fcf,$fef,$ff0
  2508. RND_Jmps    dc.l    s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12
  2509. Joy_Flag    ds.l    1
  2510. Joy_Delay    ds.l    1
  2511. Joy_Revers    ds.l    1
  2512. Change_X    ds.l    1
  2513. Change_Y    ds.l    1
  2514. Text_Flag    ds.l    1
  2515. Text_Delay    ds.l    1
  2516. Deleters    ds.l    1
  2517. Fireflag    ds.l    1
  2518. TitleCols_1    dc.w    $000,$f44,$e44,$e33,$d33,$d33,$c22,$c22
  2519.         dc.w    $b22,$b11,$a11,$a11,$911,$900,$800,$700
  2520.         dc.w    $ff0,$ff0,$ff0,$ff0,$ff0,$ff0,$ff0,$ff0
  2521.         dc.w    $ff0,$ff0,$ff0,$ff0,$ff0,$ff0,$ff0,$ff0
  2522. TitleCols_2    dc.w    $000,$72f,$71d,$61c,$51a,$508,$407,$305
  2523.         dc.w    $ff0,$ff0,$ff0,$ff0,$ff0,$ff0,$ff0,$ff0
  2524.         dc.w    $ff0,$ff0,$ff0,$ff0,$ff0,$ff0,$ff0,$ff0
  2525.         dc.w    $ff0,$ff0,$ff0,$ff0,$ff0,$ff0,$ff0,$ff0
  2526. Goodcols    dc.w    $2f2,$4f4,$6f6,$8f8,$afa,$cfc,$efe,$000
  2527.         ds.w    8
  2528.         dc.w    $f22,$f44,$f66,$f88,$faa,$fcc,$fee,$000
  2529.         ds.w    8
  2530.         dc.w    $f22,$f44,$f66,$f88,$faa,$fcc,$fee,$ff0
  2531.         ds.w    30
  2532.         dc.b    "!!"
  2533. Hiname        ds.b    20
  2534.         dc.b    0
  2535.         EVEN
  2536. gr        incbin    "Pipeline_II:Pipeline_II/data/Pipe_GR.GFX"
  2537. nl        incbin    "Pipeline_II:Pipeline_II/data/Pipe_NL.GFX"
  2538. go        incbin    "Pipeline_II:Pipeline_II/data/Pipe_GO.GFX"
  2539.  
  2540. **** Strings ****
  2541.  
  2542. Filen_0        dc.b    "Pipeline_II:Pipeline_II/data/Pipeline.GFX",0
  2543.         EVEN
  2544. Filen_1        dc.b    "Pipeline_II:Pipeline_II/data/PipeObj.GFX",0
  2545.         EVEN
  2546. Filen_2        dc.b    "Pipeline_II:Pipeline_II/data/PipeFloat.GFX",0
  2547.         EVEN
  2548. Filen_3        dc.b    "Pipeline_II:Pipeline_II/data/PipeFont.GFX",0
  2549.         EVEN
  2550. Filen_4        dc.b    "Pipeline_II:Pipeline_II/data/PipeCluster.GFX",0
  2551.         EVEN
  2552. Filen_5        dc.b    "Pipeline_II:Pipeline_II/data/PipeLogo.GFX",0
  2553.         EVEN
  2554. Filen_6        dc.b    "Pipeline_II:Pipeline_II/data/Pipeline.SCO",0
  2555.         EVEN
  2556. Status_text    dc.b    "SCORE:         HIGH:         LEVEL:  ",0
  2557.         EVEN
  2558. Clear_Line    dc.b    "                                     ",0
  2559.         EVEN
  2560. Cross_Line    dc.b    "CROSS BONUS 100 !!!                  ",0
  2561.         EVEN
  2562. Spec0_Line    dc.b    " FLOWING INTERRUPTED FOR A WHILE...  ",0
  2563.         EVEN
  2564. Spec1_Line    dc.b    "SCORE BONUS 500 !!!                  ",0
  2565.         EVEN
  2566. Spec3_Line    dc.b    "TIME STOPS SOME SECONDS...           ",0
  2567.         EVEN
  2568. Level_Text    dc.b    "LEVEL",0
  2569.         EVEN
  2570. S0_Text        dc.b    "SUDDENLY A WALL APPEARS...           ",0
  2571.         EVEN
  2572. S1_Text        dc.b    "YOUR SCORE WENT UP BY 600 !!!        ",0
  2573.         EVEN
  2574. S2_Text        dc.b    "A BLACK HOLE ARRIVED FROM DEEP SPACE!",0
  2575.         EVEN
  2576. S3_Text        dc.b    "GURU MEDITATION - SOFTWARE FAILURE !!",0
  2577.         EVEN
  2578. S4_Text        dc.b    "WHAT IS THAT ? THE CLOCK STOPS !!!   ",0
  2579.         EVEN
  2580. S5_Text        dc.b    "HUM ! THE OIL STOPS FLOWING !        ",0
  2581.         EVEN
  2582. S6_Text        dc.b    "AARGH ! YOUR SCORE WENT DOWN BY 200 !",0
  2583.         EVEN
  2584. S7_Text        dc.b    "HU ?!? NOTHING HAPPENS ! (NO IDEAS!) ",0
  2585.         EVEN
  2586. S8_Text        dc.b    "YOUR JOYSTICK-PORT HAS CRASHED !!!   ",0
  2587.         EVEN
  2588. S9_Text        dc.b    "TS, TS - YOUR JOYSTICK REVERSES...   ",0
  2589.         EVEN
  2590. S10_Text    dc.b    "UFF !!! WHERE ARE THE WALLS ???      ",0
  2591.         EVEN
  2592. S11_Text    dc.b    "SOME WALLS HAVE CHANGED !            ",0
  2593.         EVEN
  2594. S12_Text    dc.b    "BLOB !!! I CANNOT SEE ANY OIL ?!?    ",0
  2595.         EVEN
  2596. Delete_Text    dc.b    "SCORE-PENALTY 250 !!!                ",0
  2597.         EVEN
  2598. HOF        dc.l    10000
  2599.         dc.b    "      ANDRE WICHMANN"
  2600.         dc.l    9000
  2601.         dc.b    "             CLUSTER"
  2602.         dc.l    8000
  2603.         dc.b    "             CLUSTER"
  2604.         dc.l    7000
  2605.         dc.b    "             CLUSTER"
  2606.         dc.l    6000
  2607.         dc.b    "             CLUSTER"
  2608.         dc.l    5000
  2609.         dc.b    "             CLUSTER"
  2610.         dc.l    4000
  2611.         dc.b    "             CLUSTER"
  2612.         dc.l    3000
  2613.         dc.b    "             CLUSTER"
  2614.         dc.l    2000
  2615.         dc.b    "             CLUSTER"
  2616.         dc.l    1000
  2617.         dc.b    "             CLUSTER"
  2618.         EVEN
  2619. HOFText        dc.b    "       THE PIPELINE HALL OF FAME:",0
  2620.         EVEN
  2621. HOFBuffer    ds.b    42
  2622.         EVEN
  2623. Scroll        dc.b    "                                        "
  2624.         dc.b    "                                        "
  2625.         dc.b    "                                        "
  2626.         dc.b    "               PIPELINE II              "
  2627.         dc.b    "              -------------             "
  2628.         dc.b    "                                        "
  2629.         dc.b    "                                        "
  2630.         dc.b    "                                        "
  2631.         dc.b    "                                        "
  2632.         dc.b    "     (C) BY CLUSTER IN MAR/APR 1990     "
  2633.         dc.b    "                                        "
  2634.         dc.b    "          IMPROVED IN AUG 1990          "
  2635.         dc.b    "                                        "
  2636.         dc.b    "          UPDATED IN DEC 1990.          "
  2637.         dc.b    "                                        "
  2638.         dc.b    "                                        "
  2639.         dc.b    "                                        "
  2640.         dc.b    "                                        "
  2641.         dc.b    "                                        "
  2642.         dc.b    "           CONCEPT  EMPIRE (PIPEMANIA)  "
  2643.         dc.b    "                                        "
  2644.         dc.b    "  ADDITIONAL IDEAS  ANDRE WICHMANN      "
  2645.         dc.b    "                    MARTIN ROSENKRANZ   "
  2646.         dc.b    "                    GUIDO WEGENER       "
  2647.         dc.b    "                                        "
  2648.         dc.b    "       PROGRAMMING  ANDRE WICHMANN      "
  2649.         dc.b    "                                        "
  2650.         dc.b    "      IMPROVEMENTS  ANDRE WICHMANN      "
  2651.         dc.b    "                                        "
  2652.         dc.b    "     GAME GRAPHICS  ANDRE WICHMANN      "
  2653.         dc.b    "                                        "
  2654.         dc.b    "'PIPELINE/CLUSTER'  MARTIN ROSENKRANZ   "
  2655.         dc.b    "                                        "
  2656.         dc.b    "    CHARSET DESIGN  COMMODORE (C64)     "
  2657.         dc.b    "                                        "
  2658.         dc.b    "CHARSET CONVERSION  MARTIN ROSENKRANZ   "
  2659.         dc.b    "                                        "
  2660.         dc.b    "             MUSIC  ANDRE WICHMANN      "
  2661.         dc.b    "                                        "
  2662.         dc.b    "         ASSEMBLER  DEVPAC 2.14 (HISOFT)"
  2663.         dc.b    "                                        "
  2664.         dc.b    "      SOUND EDITOR  EAS SOUNDTRACKER    "
  2665.         dc.b    "                                        "
  2666.         dc.b    "                                        "
  2667.         dc.b    "                                        "
  2668.         dc.b    "                                        "
  2669.         dc.b    "                                        "
  2670.         dc.b    "                                        "
  2671.         dc.b    "  THIS PROGRAM IS FREEWARE AND MAY BE   "
  2672.         dc.b    " COPIED AS LONG AS THE DOC-FILE IS IN-  "
  2673.         dc.b    " CLUDED, NO CHANGES ARE SPREAD AND -NO- "
  2674.         dc.b    "  PROFIT IS MADE WITH DISTRIBUTION !!!  "
  2675.         dc.b    "                                        "
  2676.         dc.b    "                                        "
  2677.         dc.b    "                                        "
  2678.         dc.b    "                                        "
  2679.         dc.b    "                                        "
  2680.         dc.b    "                                        "
  2681.         dc.b    "                                        "
  2682.         dc.b    "             NEW FEATURES :             "
  2683.         dc.b    "                                        "
  2684.         dc.b    "                                        "
  2685.         DC.B    "      BETTER GRAPHICS (MADE BY AW)      "
  2686.         dc.b    "                                        "
  2687.         DC.B    "        OPTION TO DELETE A PIECE        "
  2688.         dc.b    "                                        "
  2689.         DC.B    "         3 LEVELS OF DIFFICULTY         "
  2690.         dc.b    "                                        "
  2691.         DC.B    "         THE GAME IS EASIER NOW         "
  2692.         dc.b    "                                        "
  2693.         DC.B    "    YOU CAN QUIT THE GAME (LEFT MB)     "
  2694.         dc.b    "                                        "
  2695.         DC.B    " NO PROBLEMS WITH WRITE-PROTECTED DISKS "
  2696.         dc.b    "                                        "
  2697.         DC.B    "              INTRO-SCREEN              "
  2698.         dc.b    "                                        "
  2699.         DC.B    "    CHEAT-MODE (TRY A FILE-MONITOR)     "
  2700.         dc.b    "                                        "
  2701.         DC.B    "       NEW DOCS (ENGLISH/GERMAN)        "
  2702.         dc.b    "                                        "
  2703.         dc.b    "     NO MOUSE-POINTER BETWEEN FADES     "
  2704.         dc.b    "                                        "
  2705.         DC.B    "    SEVERAL INTERNAL BUGS ARE FIXED     "
  2706.         dc.b    "                                        "
  2707.         dc.b    "                                        "
  2708.         dc.b    "                                        "
  2709.         dc.b    "                                        "
  2710.         DC.B    "                CHANGES:                "
  2711.         dc.b    "                                        "
  2712.         DC.B    "PAUSE AND RESUME WITH LEFT MOUSE-BUTTON "
  2713.         dc.b    "                                        "
  2714.         dc.b    "                                        "
  2715.         dc.b    "                                        "
  2716.         dc.b    "                                        "
  2717.         dc.b    "                                        "
  2718.         dc.b    "                                        "
  2719.         dc.b    "                                        "
  2720.         dc.b    "SORRY TO ALL NTSC-USERS, BUT I HOPE THAT"
  2721.         dc.b    "  THIS GAME WILL STILL BE PLAYABLE, MY  "
  2722.         dc.b    "NEXT PROGRAM WILL NOT USE THE WHOLE PAL-"
  2723.         dc.b    "          SCREEN ! (I HOPE...)          "
  2724.         dc.b    "                                        "
  2725.         dc.b    "                                        "
  2726.         dc.b    "                                        "
  2727.         dc.b    "                                        "
  2728.         dc.b    "                                        "
  2729.         dc.b    "                                        "
  2730.         dc.b    " THE SCORES WILL BE SAVED (I HATE GAMES "
  2731.         dc.b    " WHERE THE SCORES ARE NOT SAVED !!), SO "
  2732.         dc.b    "      TRY TO BEAT THE HIGH-SCORE !      "
  2733.         dc.b    "                                        "
  2734.         dc.b    "                                        "
  2735.         dc.b    "                                        "
  2736.         dc.b    "                                        "
  2737.         dc.b    "                                        "
  2738.         dc.b    "                                        "
  2739.         dc.b    " SEND BUG REPORTS, IMPROVEMENTS, IDEAS, "
  2740.         dc.b    "  MONEY OR JUST A FRIENDLY LETTER TO:   "
  2741.         dc.b    "                                        "
  2742.         dc.b    "             ANDRE WICHMANN             "
  2743.         dc.b    "             POSENER WEG 4              "
  2744.         dc.b    "             5300 BONN 1                "
  2745.         dc.b    "             WEST GERMANY               "
  2746.         dc.b    "                                        "
  2747.         dc.b    "                                        "
  2748.         dc.b    "                                        "
  2749.         dc.b    "                                        "
  2750.         dc.b    "                                        "
  2751.         dc.b    " OTHER PROGRAMS AVAILABLE FROM CLUSTER: "
  2752.         dc.b    "                                        "
  2753.         DC.B    "  BRAIN, FILESELECT, NEWBOOT, ASHIDO,   "
  2754.         DC.B    " MEGATEXTER, X-GRAMS, WA-TOR, ICONTROL, "
  2755.         DC.B    "  QUO VADIS, ILBM-CONVERT, DC.L, BLOB,  "
  2756.         DC.B    "  TORWAT, POINTER SISTERS, INTROS ETC.  "
  2757.         dc.b    "                                        "
  2758.         dc.b    "                                        "
  2759.         dc.b    "                                        "
  2760.         dc.b    "                                        "
  2761.         dc.b    "                                        "
  2762.         DC.B    "        PROJECTS SOON FINISHED:         "
  2763.         dc.b    "                                        "
  2764.         DC.B    "    CONQUEST, ADVENTURE-INTERPRETER,    "
  2765.         DC.B    "           FILECAT AND PUSH.            "
  2766.         dc.b    "                                        "
  2767.         dc.b    "                                        "
  2768.         dc.b    "                                        "
  2769.         dc.b    "                                        "
  2770.         dc.b    "                                        "
  2771.         dc.b    "                                        "
  2772.         dc.b    "            ENJOY THE GAME !            "
  2773.         dc.b    "                                        "
  2774.         dc.b    "                                        "
  2775.         dc.b    "                                        "
  2776.         dc.b    "                                        "
  2777.         dc.b    "                                        "
  2778.         dc.b    "                                        "
  2779.         dc.b    "                                        "
  2780.         dc.b    "                                        "
  2781.         dc.b    "                                        "
  2782.         dc.b    "                                        "
  2783.         dc.b    "                                        "
  2784.         dc.b    "                                        "
  2785.         dc.b    "                                        "
  2786.         dc.b    "                                        "
  2787.         dc.b    "                                        "
  2788.         dc.b    "                                        "
  2789.         dc.b    "                                        "
  2790.         dc.b    "                                        "
  2791.         dc.b    "                                        "
  2792.         dc.b    "                                        "
  2793.         dc.b    "                                        "
  2794.         dc.b    "                                        "
  2795.         dc.b    "                                        "
  2796.         dc.b    "                                        "
  2797.         dc.b    "                                        "
  2798.         dc.b    "                                        "
  2799.         dc.b    0
  2800.         EVEN
  2801. Goodtext_2    dc.b    "    YOU HAVE REACHED THE NEXT LEVEL!",0
  2802.         EVEN
  2803. Goodtext_3    dc.b    "    YOU HAVE EARNED A SPECIAL-BONUS!",0
  2804.         EVEN
  2805. Goodtext_4    dc.b    " SPECIALS USED:    BONUS SCORE:       ",0
  2806.         EVEN
  2807. Overtext_2    dc.b    "      .....YOU LOST THE GAME.....",0
  2808.         EVEN
  2809. Overtext_3    dc.b    "     YOU ENTERED THE HALL OF FAME !",0
  2810.         EVEN
  2811. Overtext_4    dc.b    "NO HIGH-SCORE THIS TIME, BUT NEXT GAME ?",0
  2812.         EVEN
  2813. Overtext_5    dc.b    "YOUR NAME:--------------------",0
  2814.         EVEN
  2815. Overtext_6    dc.b    "          A B C D E F G H I J",0
  2816.         EVEN
  2817. Overtext_7    dc.b    "          K L M N O P Q R S T",0
  2818.         EVEN
  2819. Overtext_8    dc.b    "          U V W X Y Z .   D E",0
  2820.         EVEN
  2821. Overtext_9    dc.b    "           YOUR SCORE:       ",0
  2822.         EVEN
  2823. Dif_1        dc.b    "           DIFFICULTY: NOVICE           ",0
  2824.         EVEN
  2825. Dif_2        dc.b    "           DIFFICULTY: NORMAL           ",0
  2826.         EVEN
  2827. Dif_3        dc.b    "           DIFFICULTY: CHAMP!           ",0
  2828.         EVEN
  2829.  
  2830.